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 8f54291d4f..0893ef1f5b 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@bdca6f102f98e2b4c7029491a53dfd366469e33d # 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@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4
+ 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:
@@ -415,7 +415,7 @@ jobs:
path: .coverage
retention-days: 14
- name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0
+ uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # pin@v6.0.1
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}
@@ -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@db35df748deb45fdef0960669f57d627c1956c30 # pin@v4
+ 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:
@@ -597,7 +597,7 @@ jobs:
- name: Run Tests
run: invoke dev.test --check --migrations --report --coverage --translations
- name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0
+ uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # pin@v6.0.1
if: always()
with:
token: ${{ secrets.CODECOV_TOKEN }}
@@ -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:
@@ -734,7 +734,7 @@ jobs:
- name: Report coverage
run: cd src/frontend && npx nyc report --report-dir ./coverage --temp-dir .nyc_output --reporter=lcov --exclude-after-remap false
- name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0
+ uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # pin@v6.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: inventree/InvenTree
@@ -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@c10b8064de6f491fea524254123dbe5e09572f13 # pin@v3
- with:
- sarif_file: results.sarif
- category: zizmor
+ - name: Run zizmor 🌈
+ uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
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 e525beeef8..a972164c14 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@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
+ uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
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 2be3883c45..45f4a02dd5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,15 +9,35 @@ 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
+- [#12011](https://github.com/inventree/InvenTree/pull/12011) adds a "creation_date" field to the StockItem API endpoint, allowing users to track when each stock item was created. This field is read-only and is automatically set to the current date and time when a new stock item is created.
+- [#12000](https://github.com/inventree/InvenTree/pull/12000) adds support for auto-allocation of stock items against sales orders. This includes both backend and frontend changes, allowing users to trigger auto-allocation via the API or through the UI. The auto-allocation process will attempt to allocate available stock items to the sales order line items, based on the specified stock sorting and allocation rules.
+- [#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
+- [#11990](https://github.com/inventree/InvenTree/pull/11990) build output operations performed via the API now offload the work to a background task, and now return a task ID which can be used to monitor the progress of the task. This allows for better performance and responsiveness when performing build output operations, as the work is performed asynchronously in the background.
+- [#11825](https://github.com/inventree/InvenTree/pull/11825) adds a new "bom" ruleset and associated permissions for BOM management, separate from the "part" ruleset which remains focused on part management. This allows for more granular control over user permissions, allowing users to have different levels of access to part management and BOM management functionality.
+- [#11816](https://github.com/inventree/InvenTree/pull/11816) makes the `issued_by` field on the `Build` API read only, and instead sets the `issued_by` field to the current user when a build is created. This change was made to ensure that the `issued_by` field accurately reflects the user who created the build, and to prevent users from setting this field to an arbitrary value when creating or updating a build.
+
### 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/Dockerfile b/contrib/container/Dockerfile
index 2a8693f11d..588cbaa17e 100644
--- a/contrib/container/Dockerfile
+++ b/contrib/container/Dockerfile
@@ -10,7 +10,7 @@
# - Monitors source files for any changes, and live-reloads server
# Base image last bumped 2026-03-20
-FROM python:3.14-slim-trixie@sha256:fb83750094b46fd6b8adaa80f66e2302ecbe45d513f6cece637a841e1025b4ca AS inventree_base
+FROM python:3.14.5-slim-trixie@sha256:c845af9399020c7e562969a13689e929074a10fd057acd1b1fad06a2fb068e97 AS inventree_base
# Build arguments for this image
ARG commit_tag=""
diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt
index 389d393530..2054860530 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
@@ -17,9 +17,9 @@ django-auth-ldap==5.3.0 \
--hash=sha256:743d8107b146240b46f7e97207dc06cb11facc0cd70dce490b7ca09dd5643d19 \
--hash=sha256:aa880415983149b072f876d976ef8ec755a438090e176817998263a6ed9e1038
# via -r contrib/container/requirements.in
-gunicorn==25.3.0 \
- --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \
- --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889
+gunicorn==26.0.0 \
+ --hash=sha256:40233d26a5f0d1872916188c276e21641155111c2853f0c2cd55260aec0d24fc \
+ --hash=sha256:ca9346f85e3a4aeeb64d491045c16b9a35647abd37ea15efe53080eb8b090baf
# 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.0 \
- --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
- --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
+packaging==26.2 \
+ --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e \
+ --hash=sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661
# via
# -c src/backend/requirements.txt
# gunicorn
@@ -236,28 +236,28 @@ typing-extensions==4.15.0 \
# via
# -c src/backend/requirements.txt
# psycopg-pool
-uv==0.10.12 \
- --hash=sha256:006812a086fce03d230fc987299f7295c7a73d17a1f1c17de1d1f327826f8481 \
- --hash=sha256:101481a1f48db6becf219914a591a588c0b3bfd05bef90768a5d04972bd6455e \
- --hash=sha256:2ace05115bd9ee1b30d341728257fe051817c4c0a652c085c90d4bd4fb0bc8f2 \
- --hash=sha256:2bb5893d79179727253e4a283871a693d7773c662a534fb897aa65496aa35765 \
- --hash=sha256:2c21e1b36c384f75dd3fd4a818b04871158ce115efff0bb4fdcd18ba2df7bd48 \
- --hash=sha256:2c5dfc7560453186e911c8c2e4ce95cd1c91e1c5926c3b34c5a825a307217be9 \
- --hash=sha256:384b7f36a1ae50efe5f50fe299f276a83bf7acc8b7147517f34e27103270f016 \
- --hash=sha256:551f799d53e397843b6cde7e3c61de716fb487da512a21a954b7d0cbc06967e0 \
- --hash=sha256:6727e3a0208059cd4d621684e580d5e254322dacbd806e0d218360abd0d48a68 \
- --hash=sha256:7099bdefffbe2df81accad52579657b8f9f870170caa779049c9fd82d645c9b3 \
- --hash=sha256:76ebe11572409dfbe20ec25a823f9bc8781400ece5356aa33ec44903af7ec316 \
- --hash=sha256:8dc352c93a47a4760cf824c31c55ce26511af780481e8f67c796d2779acaa928 \
- --hash=sha256:a5afe619e8a861fe4d49df8e10d2c6963de0dac6b79350c4832bf3366c8496cf \
- --hash=sha256:b9ca1d264059cb016c853ebbc4f21c72d983e0f347c927ca29e283aec2f596cf \
- --hash=sha256:bd84379292e3c1a1bf0a05847c7c72b66bb581dccf8da1ef94cc82bf517efa7c \
- --hash=sha256:be85acae8f31c68311505cd96202bad43165cbd7be110c59222f918677e93248 \
- --hash=sha256:cca36540d637c80d11d8a44a998a068355f0c78b75ec6b0f152ecbf89dfdd67b \
- --hash=sha256:e0f0ef58f0ba6fbfaf5f91b67aad6852252c49b8f78015a2a5800cf74c7538d5 \
- --hash=sha256:fa722691c7ae5c023778ad0b040ab8619367bcfe44fd0d9e05a58751af86cdf8
+uv==0.11.7 \
+ --hash=sha256:0df59ab0c6a4b14a763e8445e1c303af9abeb53cdfa4428daf9ff9642c0a3cce \
+ --hash=sha256:162fa961a9a081dcea6e889c79f738a5ae56507047e4672964972e33c301bea9 \
+ --hash=sha256:23d457d6731ebdb83f1bffebe4894edab2ef43c1ec5488433c74300db4958924 \
+ --hash=sha256:46d971489b00bdb27e0aa715e4a5cd4ef2c28ea5b6ef78f2b67bf861eb44b405 \
+ --hash=sha256:4e4d5e31bea86e1b6e0f5a0f95e14e80018e6f6c0129256d2915a4b3d793644d \
+ --hash=sha256:553e67cc766d013ce24353fecd4ea5533d2aedcfd35f9fac430e07b1d1f23ed4 \
+ --hash=sha256:5674dfb5944513f4b3735b05c2deba6b1b01151f46729d533d413a9a905f8c5d \
+ --hash=sha256:5985a15a92bd9a170fc1947abb1fbc3e9828c5a430ad85b5bed8356c20b67a71 \
+ --hash=sha256:6158b7e39464f1aa1e040daa0186cae4749a78b5cd80ac769f32ca711b8976b1 \
+ --hash=sha256:750ee5b96959b807cf442b73dd8b55111862d63f258f896787ea5f06b68aaca9 \
+ --hash=sha256:7d6a17507b8139b8803f445a03fd097f732ce8356b1b7b13cdb4dd8ef7f4b2e0 \
+ --hash=sha256:8b2fe1ec6775dad10183e3fdce430a5b37b7857d49763c884f3a67eaa8ca6f8a \
+ --hash=sha256:ceae53b202ea92bc954759bc7c7570cdcd5c3512fce15701198c19fd2dfb8605 \
+ --hash=sha256:dd48823ca4b505124389f49ae50626ba9f57212b9047738efc95126ed5f3844d \
+ --hash=sha256:eb91f52ee67e10d5290f2c2897e2171357f1a10966de38d83eefa93d96843b0c \
+ --hash=sha256:f394331f0507e80ee732cb3df737589de53bed999dd02a6d24682f08c2f8ac4f \
+ --hash=sha256:f422d39530516b1dfb28bb6e90c32bb7dacd50f6a383cd6e40c1a859419fbc8c \
+ --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.in b/contrib/dev_reqs/requirements.in
index c148de0a40..bb389b1af7 100644
--- a/contrib/dev_reqs/requirements.in
+++ b/contrib/dev_reqs/requirements.in
@@ -1,4 +1,4 @@
# Packages needed for CI/packages
-requests==2.33.1
+requests==2.34.2
pyyaml==6.0.3
jc==1.25.6
diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt
index 526af24a49..1c07b0fd79 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
@@ -230,9 +230,9 @@ pyyaml==6.0.3 \
# via
# -c src/backend/requirements.txt
# -r contrib/dev_reqs/requirements.in
-requests==2.33.1 \
- --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
- --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
+requests==2.34.2 \
+ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
+ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# -c src/backend/requirements.txt
# -r contrib/dev_reqs/requirements.in
@@ -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/app/build.md b/docs/docs/app/build.md
new file mode 100644
index 0000000000..4d97b03f11
--- /dev/null
+++ b/docs/docs/app/build.md
@@ -0,0 +1,35 @@
+---
+title: Build Orders
+---
+
+## Build Order List
+
+The build order list display lists all build orders:
+
+{{ image("app/build_list.png", "Build order list") }}
+
+Select an individual build order to display the detail view for that order.
+
+### Filtering
+
+Displayed build orders can be subsequently filtered using the search input at the top of the screen
+
+## Build Order Detail
+
+{{ image("app/build_detail.png", "Build order detail") }}
+
+### Edit Build Order Details
+
+From the detail view, select the *Edit* button in the top-right of the screen. This opens the build order editing display.
+
+### Required Parts Tab
+
+The *Required Parts* tab shows the parts required to complete this build order:
+
+{{ image("app/build_required_parts.png", "Build order required parts") }}
+
+### Build Outputs Tab
+
+The *Build Outputs* tab shows the stock items which have been produced as part of this build order:
+
+{{ image("app/build_outputs.png", "Build order outputs") }}
diff --git a/docs/docs/app/po.md b/docs/docs/app/po.md
index b6098b2d6f..7dbf0de24d 100644
--- a/docs/docs/app/po.md
+++ b/docs/docs/app/po.md
@@ -30,7 +30,7 @@ The *Line Items* tab shows the line items associated with this purchase order:
{{ image("app/po_lines.png", "Purchase order line items") }}
-Long press on a particular line item to receive the item into stock.
+Select a particular line item to view the details for that line, and receive the line item into stock.
### Stock Items
diff --git a/docs/docs/assets/images/app/build_detail.png b/docs/docs/assets/images/app/build_detail.png
new file mode 100644
index 0000000000..59112cd1dd
Binary files /dev/null and b/docs/docs/assets/images/app/build_detail.png differ
diff --git a/docs/docs/assets/images/app/build_list.png b/docs/docs/assets/images/app/build_list.png
new file mode 100644
index 0000000000..30e4516035
Binary files /dev/null and b/docs/docs/assets/images/app/build_list.png differ
diff --git a/docs/docs/assets/images/app/build_outputs.png b/docs/docs/assets/images/app/build_outputs.png
new file mode 100644
index 0000000000..1c2efcac97
Binary files /dev/null and b/docs/docs/assets/images/app/build_outputs.png differ
diff --git a/docs/docs/assets/images/app/build_required_parts.png b/docs/docs/assets/images/app/build_required_parts.png
new file mode 100644
index 0000000000..3240674b7d
Binary files /dev/null and b/docs/docs/assets/images/app/build_required_parts.png differ
diff --git a/docs/docs/assets/images/build/bom_compare.png b/docs/docs/assets/images/build/bom_compare.png
new file mode 100644
index 0000000000..4f1e124c4a
Binary files /dev/null and b/docs/docs/assets/images/build/bom_compare.png differ
diff --git a/docs/docs/assets/images/build/bom_compare_icon.png b/docs/docs/assets/images/build/bom_compare_icon.png
new file mode 100644
index 0000000000..e22b4c1b07
Binary files /dev/null and b/docs/docs/assets/images/build/bom_compare_icon.png differ
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/faq/boundary.png b/docs/docs/assets/images/faq/boundary.png
new file mode 100644
index 0000000000..0a0f8a7f37
Binary files /dev/null and b/docs/docs/assets/images/faq/boundary.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..7a60701470 100644
--- a/docs/docs/concepts/custom_states.md
+++ b/docs/docs/concepts/custom_states.md
@@ -4,16 +4,70 @@ title: Custom States
## Custom States
-Several models within InvenTree support the use of custom states. The custom states are display only - the business logic is not affected by the state.
+Several models within InvenTree support the use of *custom states*. Custom states extend the built-in status system by adding extra labels and colours that are displayed in the user interface.
-States can be added in the [Admin Center](../settings/admin.md#admin-center) under the "Custom States" section. Each state has a name, label and a color that are used to display the state in the user interface. Changes to these settings will only be reflected in the user interface after a full reload of the interface.
+!!! info "Display Only"
+ Custom states affect display only — they do not add new workflow steps or change business logic. Every custom state is mapped to an existing built-in state (its *logical key*), and the system uses that built-in state for all decisions such as availability counts, order transitions, and filtering.
-States need to be assigned to a model, state (for example status on a StockItem) and a logical key - that will be used for business logic. These 3 values combined need to be unique throughout the system.
+### Example
-Custom states can be defined for the following models:
+Suppose you want to track stock items that are physically present and available, but are waiting for a quality inspection before use. The built-in `OK` status is the closest match — the item is available — but you want it to appear distinctly in the interface.
-- [Stock Item](../stock/index.md)
-- [Build Order](../manufacturing/build.md)
-- [Purchase Order](../purchasing/purchase_order.md)
-- [Sales Order](../sales/sales_order.md)
-- [Return Order](../sales/return_order.md)
+You would create a custom state:
+
+- **Logical key**: `OK` — the system treats the item as available stock
+- **Label**: `Awaiting Inspection` — shown in the interface instead of "OK"
+- **Colour**: `warning` — displayed in amber to draw attention
+
+The item is counted as available stock in all reports and filters, but is visually distinguished from items with a standard `OK` status.
+
+## Managing Custom States
+
+Custom states are managed in the [Admin Center](../settings/admin.md#admin-center) under the *Custom States* section.
+
+!!! warning "Page Reload Required"
+ Changes to custom states are only reflected in the user interface after a full page reload.
+
+## State Fields
+
+When creating a custom state, the following fields must be provided:
+
+| Field | Description |
+|-------|-------------|
+| **Model** | The model type this state applies to (e.g. *Stock Item*, *Build Order*) |
+| **Reference Status** | The status class being extended (e.g. `StockStatus`, `BuildStatus`) |
+| **Logical Key** | The built-in status value this custom state maps to for business logic |
+| **Key** | A unique integer that identifies this custom state in the database |
+| **Name** | An uppercase Python identifier for this state (e.g. `AWAITING_INSPECTION`) |
+| **Label** | The human-readable text displayed in the interface |
+| **Colour** | The badge colour used to display the state |
+
+### Key
+
+The *Key* is the integer value stored in the database when this custom state is active. It must satisfy all of the following:
+
+- Must be a positive integer
+- Must not be equal to the *Logical Key*
+- Must not conflict with any existing built-in status values for the selected model
+
+### Name
+
+The *Name* field is used internally to identify the state. It must:
+
+- Be uppercase (e.g. `AWAITING_INSPECTION`, not `awaiting_inspection`)
+- Be a valid Python identifier (letters, digits, underscores; no spaces or hyphens)
+- Not conflict with any existing status names for the selected model
+
+### Colours
+
+The following colour values are available:
+
+| Colour | Appearance |
+|--------|------------|
+| `primary` | Blue |
+| `secondary` | Grey |
+| `success` | Green |
+| `warning` | Amber |
+| `danger` | Red |
+| `info` | Cyan |
+| `dark` | Dark grey / black |
diff --git a/docs/docs/concepts/data_export.md b/docs/docs/concepts/data_export.md
new file mode 100644
index 0000000000..bb5a20f369
--- /dev/null
+++ b/docs/docs/concepts/data_export.md
@@ -0,0 +1,72 @@
+---
+title: Exporting Data
+---
+
+## Exporting Data
+
+InvenTree provides data export functionality for a variety of data types. Most data tables in the web interface include a *Download* button in the table toolbar, which allows the currently displayed data to be exported to a file.
+
+!!! info "Filtered Data"
+ The export reflects the data currently visible in the table — any active filters, search terms, or sort order are carried through to the exported file. To export the full dataset, clear all filters before exporting.
+
+!!! info "Paginated Data"
+ In the user interface, data tables are paginated to improve performance. When exporting data, the export will include **all** records that match the current filters and search terms, not just the records visible on the current page.
+
+## How to Export
+
+**Step 1** — In any table view, click the {{ icon("cloud-download") }} *Download* button in the table toolbar:
+
+{{ image("admin/export.png", "Download button") }}
+
+**Step 2** — An export dialog is displayed. Select the desired *Export Format* and *Export Plugin*, then click *Export*:
+
+{{ image("admin/export_options.png", "Export dialog") }}
+
+**Step 3** — The export runs in the background. A loading indicator is shown while the export is being processed. When the export is complete, the file is automatically downloaded to your browser.
+
+## Supported File Formats
+
+The following file formats are available for export:
+
+| Format | Description |
+|--------|-------------|
+| CSV | Comma-separated values. Portable plain-text format, compatible with most tools. |
+| Excel | Microsoft Excel format (`.xlsx`). Suitable for direct use in spreadsheet applications. |
+| TSV | Tab-separated values. Similar to CSV but uses tab characters as delimiters. |
+
+## Export Plugins
+
+InvenTree uses a plugin-based export system. The export dialog lists all plugins that are available for the data type being exported. Selecting a different plugin may provide additional export options or a different output format.
+
+### Built-in Exporters
+
+InvenTree includes the following built-in export plugins:
+
+| Plugin | Description |
+|--------|-------------|
+| [InvenTree Exporter](../plugins/builtin/inventree_exporter.md) | General-purpose exporter for any tabulated dataset. Always enabled. |
+| [BOM Exporter](../plugins/builtin/bom_exporter.md) | Custom exporter for Bill of Materials data, with additional BOM-specific options. |
+| [Parameter Exporter](../plugins/builtin/parameter_exporter.md) | Exports part data including all associated custom parameter values as additional columns. |
+| [Stocktake Exporter](../plugins/builtin/stocktake_exporter.md) | Exports a comprehensive stock-level summary for parts, with optional pricing and variant data. |
+
+Custom export plugins can also be developed using the [DataExportMixin](../plugins/mixins/export.md).
+
+## API Export
+
+Data can also be exported programmatically via the InvenTree REST API. To trigger an export, perform a `GET` request against any list endpoint with the following query parameters:
+
+| Parameter | Description |
+|-----------|-------------|
+| `export` | Set to `true` to trigger an export |
+| `export_format` | File format: `csv`, `xlsx`, or `tsv` (default: `csv`) |
+| `export_plugin` | Slug of the export plugin to use (default: `inventree-exporter`) |
+
+Additional `export_*` parameters may be accepted depending on the plugin selected.
+
+**Example:**
+
+```
+GET /api/part/?export=true&export_format=xlsx&export_plugin=inventree-exporter
+```
+
+Refer to the [API documentation](../api/index.md) for further details.
diff --git a/docs/docs/settings/import.md b/docs/docs/concepts/data_import.md
similarity index 93%
rename from docs/docs/settings/import.md
rename to docs/docs/concepts/data_import.md
index 2fbdb7e37d..16b1e1f259 100644
--- a/docs/docs/settings/import.md
+++ b/docs/docs/concepts/data_import.md
@@ -43,7 +43,7 @@ Importing data is a multi-step process, which is managed via an *import session*
The import session is managed by the InvenTree server, and all import session data is stored on the server. As the import process can be time-consuming, the user can navigate away from the import page and return later to check on the progress of the import.
-Import sessions can be managed from the [Admin Center](./admin.md#admin-center) page, which lists all available import sessions
+Import sessions can be managed from the [Admin Center](../settings/admin.md#admin-center) page, which lists all available import sessions
### Context Sensitive Importing
@@ -55,9 +55,9 @@ An import session can be initiated from a number of different contexts within th
### Admin Center
-Staff users can create an import session from within the [Admin Center](./admin.md#admin-center). This is a general-purpose import session, and the user will be required to select the type of data to import.
+Staff users can create an import session from within the [Admin Center](../settings/admin.md#admin-center). This is a general-purpose import session, and the user will be required to select the type of data to import.
-Users can quickly navigate to the data import managemement page from the [spotlight search](../concepts/user_interface.md#spotlight), by searching for "import" and selecting the "Import data" option.
+Users can quickly navigate to the data import management page from the [spotlight search](../concepts/user_interface.md#spotlight), by searching for "import" and selecting the "Import data" option.
### Data Tables
@@ -123,7 +123,7 @@ The basic outline of this process is:
### Create Import Session
!!! note "Admin Center"
- Updating existing records can only be performed when creating a new import session from the [Admin Center](./admin.md#admin-center).
+ Updating existing records can only be performed when creating a new import session from the [Admin Center](../settings/admin.md#admin-center).
Create a new import session, and ensure that the *Update Existing Records* option is selected. This will allow the import session to update existing records in the database.
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/faq.md b/docs/docs/faq.md
index 3f3bbe01f3..b0852be612 100644
--- a/docs/docs/faq.md
+++ b/docs/docs/faq.md
@@ -195,3 +195,24 @@ This means that either:
- The docker user does not have write permission to the specified directory
In either case, ensure that the directory is available *on your local machine* and the user account has the required permissions.
+
+
+## Error Rendering Component
+
+Sometimes, following a software update, you may find that certain components of the web interface are not rendering correctly, and presented with a message similar to the screenshot below:
+
+{{ image("faq/boundary.png", "Error Rendering Component") }}
+
+This is often due to a caching issue with your web browser. Try performing a hard refresh of the page to clear the cache, this should resolve the issue in most cases.
+
+If the problem persists, refer to the [troubleshooting guide](./troubleshooting.md) for further assistance.
+
+## Expression tree is too large
+
+If you are running a large InvenTree deployment on an SQLite database, you may encounter an error similar to:
+
+```
+Expression tree is too large (maximum depth 1000)
+```
+
+This is a [known limitation of SQLite](https://www.sqlite.org/limits.html) which can occur when performing complex queries on a large database. Due to [structural limitations](./start/processes.md#sqlite-limitations) of SQLite, it is recommended to use a more robust database backend such as PostgreSQL for larger deployments.
diff --git a/docs/docs/manufacturing/allocate.md b/docs/docs/manufacturing/allocate.md
index 4594e85839..da24fbc57d 100644
--- a/docs/docs/manufacturing/allocate.md
+++ b/docs/docs/manufacturing/allocate.md
@@ -80,7 +80,16 @@ The *Deallocate Stock* button can be used to remove all allocations of untracked
## Automatic Stock Allocation
-To speed up the allocation process, the *Auto Allocate* button can be used to allocate untracked stock items to the build. Automatic allocation of stock items does not work in every situation, as a number of criteria must be met.
+To speed up the allocation process, the *Auto Allocate* button can be used to automatically allocate stock items to the build.
+
+!!! info "Background Task"
+ Auto-allocation runs as a background task. The UI will display a progress indicator while the task is running.
+
+#### Selecting Lines to Allocate
+
+By default, auto-allocation processes **all eligible BOM line items** in the build order. To restrict allocation to a subset of lines, select the desired rows in the allocation table before pressing the button — the dialog will indicate how many lines are selected.
+
+#### Auto Allocation Options
The *Automatic Allocation* dialog is presented as shown below:
@@ -90,12 +99,16 @@ The *Automatic Allocation* dialog is presented as shown below:
Select the master location where stock items are to be allocated from. Leave this input blank to allocate stock items from any available location.
+**Exclude Location**
+
+Exclude stock from a specific location (and all of its sub-locations). Useful for reserving stock in a particular area.
+
**Interchangeable Stock**
Set this option to *True* to signal that stock items can be used interchangeably. This means that in the case where multiple stock items are available, the auto-allocation routine does not care which stock item it uses.
!!! warning "Take Care"
- If the *Interchangeable Stock* option is enabled, and there are multiple stock items available, the results of the automatic allocation algorithm may somewhat unexpected.
+ If the *Interchangeable Stock* option is enabled, and there are multiple stock items available, the results of the automatic allocation algorithm may be somewhat unexpected.
!!! info "Example"
Let's say that we have 5 reels of our *C_100nF_0603* capacitor, each with 4,000 parts available. If we do not mind which of these reels the stock should be taken from, we enable the *Interchangeable Stock* option in the dialog above. In this case, the stock will be allocated from one of these reels, and eventually subtracted from stock when the build is completed.
@@ -104,6 +117,32 @@ Set this option to *True* to signal that stock items can be used interchangeably
Set this option to *True* to allow substitute parts (as specified by the BOM) to be allocated, if the primary parts are not available.
+**Optional Items**
+
+Set this option to *True* to include optional BOM line items in the auto-allocation. By default, optional items are not automatically allocated.
+
+**Item Type**
+
+Controls which category of BOM line items is considered for auto-allocation:
+
+| Option | Description |
+| --- | --- |
+| Untracked Items | Only untracked (non-serialized) BOM lines are allocated *(default)* |
+| Tracked Items | Only tracked BOM lines are allocated |
+| All Items | Both tracked and untracked BOM lines are allocated |
+
+**Stock Priority**
+
+Controls the order in which matching stock items are consumed:
+
+| Option | Description |
+| --- | --- |
+| Oldest stock first (FIFO) | Stock items updated least recently are consumed first *(default)* |
+| Newest stock first (LIFO) | Stock items updated most recently are consumed first |
+| Smallest quantity first | Stock items with the lowest available quantity are consumed first |
+| Largest quantity first | Stock items with the highest available quantity are consumed first |
+| Soonest expiry date first | Stock items expiring earliest are consumed first; items with no expiry date are used last |
+
## Allocating Tracked Stock
Allocation of tracked stock items is slightly more complex. Instead of being allocated against the *Build Order*, tracked stock items must be allocated against an individual *Build Output*.
diff --git a/docs/docs/manufacturing/bom.md b/docs/docs/manufacturing/bom.md
index 4114b5b9ea..7e82cb68a5 100644
--- a/docs/docs/manufacturing/bom.md
+++ b/docs/docs/manufacturing/bom.md
@@ -4,7 +4,7 @@ title: Bill of Materials
## Bill of Materials
-A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create builds](./build.md) and allocate inventory.
+A Bill of Materials (BOM) defines the list of component parts required to make an assembly, [create build orders](./build.md) and allocate inventory.
A part which can be built from other sub components is called an *Assembly*.
@@ -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.
@@ -92,13 +105,20 @@ Note that inherited BOM Line Items only flow "downwards" in the variant inherita
!!! info "Editing Inherited Items"
When editing an inherited BOM Line Item for a template part, the changes are automatically reflected in the BOM of any variant parts.
-## BOM Creation
+## BOM Editing
-BOMs can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file.
+Bills of Material (BOMs) can be created manually, by adjusting individual line items, or by uploading (importing) an existing BOM file.
+
+### Editing Mode
+
+By default, the BOM is displayed in "view" mode. To edit the BOM, click on the {{ icon("edit", color="blue", title="Edit") }} icon at the top of the BOM panel. This will enable editing mode, which allows you to add, adjust or delete BOM line items.
+
+!!! warning "Permissions"
+ Only users with the appropriate permissions can edit BOMs. If you do not have permission to edit the BOM, the "Edit" icon will not be visible.
### Importing a BOM
-BOM data can be imported from an existing file (such as CSV or Excel) from the *BOM* panel for a particular part/assembly. This process is a special case of the more general [data import process](../settings/import.md).
+BOM data can be imported from an existing file (such as CSV or Excel) from the *BOM* panel for a particular part/assembly. This process is a special case of the more general [data import process](../concepts/data_import.md).
At the top of the *BOM* panel, click on the {{ icon("file-arrow-left", color="green", title="Import BOM Data") }} icon to open the import dialog.
@@ -162,89 +182,40 @@ If the BOM requires revalidation, the status will be displayed as "Not Validated
{{ image("build/bom_invalid.png", "BOM Not Validated") }}
-## Required Quantity Calculation
+## BOM Comparison
-When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made:
+It is possible to compare the BOM of one assembly with another assembly. This comparison can highlight different component parts, quantities and other properties of the BOM line items.
-### Base Quantity
+To compare the BOM of one assembly with another, navigate to the "Bill of Materials" tab of the part detail page, then click on the {{ icon("git-compare", color="blue", title="Compare BOM") }} icon at the top of the BOM table:
-The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required.
+{{ image("build/bom_compare_icon.png", "BOM Compare") }}
-```
-Required Quantity = Base Quantity * Number of Assemblies
-```
+This will open the BOM comparison view, which allows you to select a secondary assembly to compare with the primary assembly. The BOM line items of the two assemblies will be displayed side by side, with differences highlighted:
-### Attrition
+{{ image("build/bom_compare.png", "BOM Compare") }}
-The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%).
+### Display Mode
-If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value.
+When comparing BOMs from two different assemblies, the user can select from the following view modes:
-```
-Required Quantity = Required Quantity * (1 + Attrition Percentage)
-```
+| View Mode | Description |
+| --- | --- |
+| *Show all parts* | Display all BOM line items from both assemblies. Differences are highlighted. |
+| *Show different parts* | Display only the BOM line items which are different between the two assemblies. |
+| *Show common parts* | Display only the BOM line items which are common between the two assemblies. |
-!!! info "Optional"
- The attrition percentage is optional. If not specified, it defaults to 0%.
+In each case, any differences between the BOM line items are highlighted in red.
-### Setup Quantity
+## Replacing Components
-The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`.
+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.
-```
-Required Quantity = Required Quantity + Setup Quantity
-```
+To replace a component part within multiple assemblies:
-!!! info "Optional"
- The setup quantity is optional. If not specified, it defaults to 0.
+- 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
-### Rounding Multiple
+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:
-The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements.
-
-```
-Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple
-```
-
-!!! info "Optional"
- The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity.
-
-### Example Calculation
-
-Consider a BOM line item with the following properties:
-
-- Base Quantity: 3
-- Attrition: 2% (0.02)
-- Setup Quantity: 10
-- Rounding Multiple: 25
-
-If we are building 100 assemblies, the required quantity would be calculated as follows:
-
-```
-Required Quantity = Base Quantity * Number of Assemblies
- = 3 * 100
- = 300
-
-Attrition Value = Required Quantity * Attrition Percentage
- = 300 * 0.02
- = 6
-
-Required Quantity = Required Quantity + Attrition Value
- = 300 + 6
- = 306
-
-Required Quantity = Required Quantity + Setup Quantity
- = 306 + 10
- = 316
-
-Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple
- = ceil(316 / 25) * 25
- = 13 * 25
- = 325
-
-```
-
-So the final required production quantity of the component part would be `325`.
-
-!!! info "Calculation"
- The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created.
+{{ 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/manufacturing/required.md b/docs/docs/manufacturing/required.md
new file mode 100644
index 0000000000..949277b9ab
--- /dev/null
+++ b/docs/docs/manufacturing/required.md
@@ -0,0 +1,90 @@
+---
+title: Required Build Quantity
+---
+
+## Required Build Quantity
+
+When a new [Build Order](./build.md) is created, the required production quantity of each component part is calculated based on the BOM line items defined for the assembly being built. To calculate the required production quantity of a component part, the following considerations are made:
+
+### Base Quantity
+
+The base quantity of a BOM line item is defined by the `Quantity` field of the BOM line item. This is the number of parts which are required to build one assembly. This value is multiplied by the number of assemblies which are being built to determine the total quantity of parts required.
+
+```
+Required Quantity = Base Quantity * Number of Assemblies
+```
+
+### Attrition
+
+The `Attrition` field of a BOM line item is used to account for expected losses during the production process. This is expressed as a percentage of the `Base Quantity` (e.g. 2%).
+
+If a non-zero attrition percentage is specified, it is applied to the calculated `Required Quantity` value.
+
+```
+Required Quantity = Required Quantity * (1 + Attrition Percentage)
+```
+
+!!! info "Optional"
+ The attrition percentage is optional. If not specified, it defaults to 0%.
+
+### Setup Quantity
+
+The `Setup Quantity` field of a BOM line item is used to account for fixed losses during the production process. This is an additional quantity of the part which is required to ensure that the production run can be completed successfully. This value is added to the calculated `Required Quantity`.
+
+```
+Required Quantity = Required Quantity + Setup Quantity
+```
+
+!!! info "Optional"
+ The setup quantity is optional. If not specified, it defaults to 0.
+
+### Rounding Multiple
+
+The `Rounding Multiple` field of a BOM line item is used to round the calculated `Required Quantity` value to the nearest multiple of the specified value. This is useful for ensuring that the required quantity is a whole number, or to meet specific packaging requirements.
+
+```
+Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple
+```
+
+!!! info "Optional"
+ The rounding multiple is optional. If not specified, no rounding is applied to the calculated production quantity.
+
+### Example Calculation
+
+Consider a BOM line item with the following properties:
+
+- Base Quantity: 3
+- Attrition: 2% (0.02)
+- Setup Quantity: 10
+- Rounding Multiple: 25
+
+If we are building 100 assemblies, the required quantity would be calculated as follows:
+
+```
+Required Quantity = Base Quantity * Number of Assemblies
+ = 3 * 100
+ = 300
+
+Attrition Value = Required Quantity * Attrition Percentage
+ = 300 * 0.02
+ = 6
+
+Required Quantity = Required Quantity + Attrition Value
+ = 300 + 6
+ = 306
+
+Required Quantity = Required Quantity + Setup Quantity
+ = 306 + 10
+ = 316
+
+Required Quantity = ceil(Required Quantity / Rounding Multiple) * Rounding Multiple
+ = ceil(316 / 25) * 25
+ = 13 * 25
+ = 325
+
+```
+
+So the final required production quantity of the component part would be `325`.
+
+!!! info "Calculation"
+ The required quantity calculation is performed automatically when a new [Build Order](./build.md) is created.
diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md
index 9aaa06e55e..842e2133e5 100644
--- a/docs/docs/part/create.md
+++ b/docs/docs/part/create.md
@@ -48,7 +48,7 @@ If the *Add Supplier Data* option is checked, then supplier part and manufacture
Parts can be imported from an external file, by selecting the *Import from File* option.
-This action opens the [data import wizard](../settings/import.md), which steps the user through the process of importing parts from the selected file.
+This action opens the [data import wizard](../concepts/data_import.md), which steps the user through the process of importing parts from the selected file.
## Import from Supplier
diff --git a/docs/docs/part/index.md b/docs/docs/part/index.md
index 076da58b25..1c7d048268 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:
@@ -83,6 +96,8 @@ Parts can be locked to prevent them from being modified. This is useful for part
- BOM items cannot be created, edited, or deleted when they are part of a locked assembly
- Parameters linked to a locked part cannot be created, edited or deleted
+The part locking functionality can be enabled or disabled globally via the [Part Locking](../settings/global.md#parts) system setting (`PART_ENABLE_LOCKING`). When disabled, the locked state of a part is ignored and all operations are permitted.
+
## Active Parts
By default, all parts are *Active*. Marking a part as inactive means it is not available for many actions, but the part remains in the database. If a part becomes obsolete, it is recommended that it is marked as inactive, rather than deleting it from the database.
@@ -145,4 +160,4 @@ The [InvenTree mobile app](../app/part.md#part-image-view) allows part images to
## Part Import
-*Parts* can be imported by staff-members on the part-list-view (this feature must be enabled in the part-settings), in the part-settings or on the [admin-page for parts](../settings/import.md) (only accessible if you are also an admin). The first two options provide a multi-stage wizard that enables mapping fields from various spreadsheet or table-data formats while the latter requires a well-formatted file but is much more performant.
+*Part* data can be imported using the [data import wizard](../concepts/data_import.md). This allows part data to be imported from an external file, which can be useful for bulk importing of part data.
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/app.md b/docs/docs/plugins/mixins/app.md
index e607bc7b52..895341d4c6 100644
--- a/docs/docs/plugins/mixins/app.md
+++ b/docs/docs/plugins/mixins/app.md
@@ -8,3 +8,27 @@ If this mixin is added to a plugin the directory the plugin class is defined in
!!! warning "Danger Zone"
Only use this mixin if you have an understanding of Django's [app system]({% include "django.html" %}/ref/applications). Plugins with this mixin are deeply integrated into InvenTree and can cause difficult to reproduce or long-running errors. Use the built-in testing functions of Django to make sure your code does not cause unwanted behaviour in InvenTree before releasing.
+
+## Custom Models
+
+This mixin allows you to define custom database models within your plugin. These models will be automatically registered with the InvenTree server, and will be available for use within your plugin code.
+
+### Model Permissions
+
+Some database operations within the InvenTree ecosystem may require custom permissions checks - to determine which actions a user can perform against a given model. If your plugin defines custom models, you may need to implement a custom permission check method on your model class.
+
+Each model class can implement a `check_user_permission` classmethod, which will be called by the InvenTree permission system when checking permissions for that model. This method should return `True` if the user has the required permissions, and `False` otherwise.
+
+
+```python
+class MyCustomModel(models.Model):
+ # model fields here
+
+ @classmethod
+ def check_user_permission(cls, user: User, permission: str) -> bool:
+ # custom permission logic here
+ return True # or False
+```
+
+!!! warning "Default Permissions"
+ By default, if the `check_user_permission` method is not implemented, the InvenTree permission system will return `False` for all permission checks against that model. This is to ensure that no permissions are granted by default, and that the plugin developer must explicitly define the required permissions for their custom models.
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/project/resources.md b/docs/docs/project/sponsored_resources.md
similarity index 97%
rename from docs/docs/project/resources.md
rename to docs/docs/project/sponsored_resources.md
index 9074d17818..0a733b0686 100644
--- a/docs/docs/project/resources.md
+++ b/docs/docs/project/sponsored_resources.md
@@ -1,5 +1,5 @@
---
-title: Resources InvenTree receives
+title: Sponsored Resources
---
The InvenTree project is grateful to receive resources from various vendors free of charge.
@@ -18,5 +18,6 @@ Individuals and companies can also support via [GitHub sponsors](https://github.
## Past Supporters
Non comprehensive list of past supporters. The project stops consuming resources for various reasons, this does not mean they are not good resources.
+
- [Coveralls](https://coveralls.io/) - Code coverage as a service
- [Deepsource](https://deepsource.io/) - Code quality and security analysis
diff --git a/docs/docs/sales/sales_order.md b/docs/docs/sales/sales_order.md
index ebdf3d2e69..239651b753 100644
--- a/docs/docs/sales/sales_order.md
+++ b/docs/docs/sales/sales_order.md
@@ -110,6 +110,79 @@ After shipments were created, user can either:
During the allocation process, user is required to select the desired shipment that will contain the stock items.
+### Auto Allocate Stock
+
+To speed up the allocation process, use the *Auto Allocate Stock* button ({{ icon("wand") }}) available in the *Line Items* tab. This automatically finds available stock and creates the required allocations with minimal user interaction.
+
+!!! info "Background Task"
+ Auto-allocation runs as a background task. The UI will display a progress indicator while the task is running.
+
+#### Selecting Lines to Allocate
+
+By default, auto-allocation processes **all unallocated line items** on the order. To restrict allocation to a subset of lines, select the desired rows in the *Line Items* table before pressing the button — the dialog will indicate how many lines are selected.
+
+#### Auto Allocation Options
+
+The auto-allocation dialog provides the following options:
+
+**Source Location**
+
+Restrict stock to a specific location (and all of its sub-locations). Leave blank to consider stock from any location.
+
+**Exclude Location**
+
+Exclude stock from a specific location (and all of its sub-locations). Useful for reserving stock in a particular area.
+
+**Shipment**
+
+Optionally assign all new allocations to a specific pending shipment. Only shipments that have not yet been completed are shown.
+
+**Interchangeable Stock**
+
+When enabled (default), stock may be drawn from multiple stock items or locations to fulfil a single line item. When disabled, a line item is only allocated if a single stock item can cover the entire remaining quantity.
+
+!!! warning "Take Care"
+ Enabling *Interchangeable Stock* means the auto-allocation routine will combine stock from different batches or locations. Review the resulting allocations if traceability is important.
+
+**Stock Priority**
+
+Controls the order in which matching stock items are consumed:
+
+| Option | Description |
+| --- | --- |
+| Oldest stock first (FIFO) | Stock items updated least recently are consumed first *(default)* |
+| Newest stock first (LIFO) | Stock items updated most recently are consumed first |
+| Smallest quantity first | Stock items with the lowest available quantity are consumed first |
+| Largest quantity first | Stock items with the highest available quantity are consumed first |
+| Soonest expiry date first | Stock items expiring earliest are consumed first; items with no expiry date are used last |
+
+**Serialized Stock**
+
+Controls whether serialized stock items are included in the auto-allocation:
+
+| Option | Description |
+| --- | --- |
+| Allow any stock | Both serialized and unserialized stock items are considered *(default)* |
+| Serialized stock only | Only stock items that carry a serial number are allocated |
+| Unserialized stock only | Only stock items without a serial number are allocated |
+
+#### Allocation Behaviour
+
+The auto-allocation routine performs the following steps for each eligible line item:
+
+1. Skips line items for *virtual* parts.
+2. Skips line items that are already fully allocated.
+3. Queries available stock for the line's part, applying any location and serialized-stock filters.
+4. Sorts the candidates according to the chosen *Stock Priority*.
+5. Greedily allocates from each stock item in turn until the remaining quantity for the line is satisfied.
+
+#### Removing Allocations
+
+Individual or multiple allocations can be removed from the *Allocated Stock* tab. Select the allocations to remove and use the *Delete* action.
+
+!!! warning "Shipped Allocations Protected"
+ Allocations that belong to a completed (shipped) shipment cannot be deleted.
+
### Check Shipment
Shipments can be marked as "checked" to indicate that the items in the shipment has been verified. To mark a shipment as "checked", open the shipment actions menu, and select the "Check" action:
@@ -234,3 +307,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/security.md b/docs/docs/security.md
index d5a34403f5..6a3be12052 100644
--- a/docs/docs/security.md
+++ b/docs/docs/security.md
@@ -6,24 +6,24 @@ The InvenTree project is committed to providing a secure and safe environment fo
To that end, we have implemented a number of security measures over the years, which we will outline in this document.
-## Organisational measures
+## Organizational Measures
The InvenTree project is managed by a small team of developers, who are responsible for the ongoing development and maintenance of the software. Two geographically distributed users have administrative access to the InvenTree codebase. Merges are only done by one of these two users, the maintainer Oliver.
Read the Project [Governance](./project/governance.md) document for more information.
-InvenTree is open-source, and we welcome contributions from the community. However, all contributions are reviewed and scrutinised before being merged into the codebase.
+InvenTree is open-source, and we welcome contributions from the community. However, all contributions are reviewed and scrutinized before being merged into the codebase.
### Security Policy
The official [Security Policy]({{ sourcefile("SECURITY.md") }}) is available in the code repository.
-We provide this document in our main repo to increase discoverabiltity to ensure that all security issues are handled in a timely manner.
+We provide this document in our main repo to increase discoverability to ensure that all security issues are handled in a timely manner.
### Past Reports
If we become aware of a security issue, we will take immediate action to address the issue, and will provide a public disclosure of the issue once it has been resolved. We support assigning CVEs to security issues where appropriate. Our [past security advisories can be found here](https://github.com/inventree/InvenTree/security/advisories).
-## Technical measures
+## Technical Measures
-### Code hosting
+### Code Hosting
The InvenTree project is hosted on GitHub, and we rely on the security measures provided by GitHub to help protect the integrity of the codebase.
@@ -35,24 +35,24 @@ Among those are:
- (Optional but encouraged) Two-factor authentication for user accounts
- (Optional but encouraged) Signed commits / actions
-### Code style
+### Code Style
We enforce style and security checks in our CI/CD pipeline, and we have several automated tests to ensure that the codebase is secure and functional.
Checks are run on every pull request, and we require that all checks pass before a pull request can be merged.
-### Current versions
+### Current Versions
InvenTree is built using the Django framework, which has a strong focus on security. We follow best practices for Django development, and we are committed to keeping the codebase up-to-date with the latest security patches and within supported versions.
-### Test coverage
+### Test Coverage
We run coverage tests on our codebase to ensure that we have a high level of test coverage above 90%. This is public and can be found [here](https://app.codecov.io/gh/inventree/InvenTree).
-### Pinning dependencies
+### Pinning Dependencies
We are pinning dependencies to specific versions - aiming for complete reproducibility of builds - wherever possible. Combined with continuous OSV checks, we are able to react quickly to security issues in our dependencies.
-## Best practices
+## Best Practices
We follow most of GitHubs community best practices, check our compliance [here](https://github.com/inventree/InvenTree/community).
diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md
index b04849927d..120bbc5b56 100644
--- a/docs/docs/settings/error_codes.md
+++ b/docs/docs/settings/error_codes.md
@@ -105,6 +105,11 @@ A potentially critical mismatch between the backup environment and the current r
While using [invoke](../start/invoke.md), this can be overridden with the `--restore-allow-newer-version` flag.
+#### INVE-E17
+**Error rendering component**
+
+An error occurred while rendering a component in the frontend. Typically this is caused by a browser caching issue, and can be resolved by clearing the browser cache and refreshing the page. If the issue persists, check the browser console for more information about the error.
+
### INVE-W (InvenTree Warning)
Warnings - These are non-critical errors which should be addressed when possible.
diff --git a/docs/docs/settings/export.md b/docs/docs/settings/export.md
deleted file mode 100644
index 4ab560454a..0000000000
--- a/docs/docs/settings/export.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Exporting Data
----
-
-## Exporting Data
-
-InvenTree provides data export functionality for a variety of data types. Most data tables provide an "Download" button, which allows the user to export the data in a variety of formats.
-
-In the top right corner of the table, click the "Download" button to export the data in the table.
-
-{{ image("admin/export.png", "Download") }}
-
-This will present a dialog box with the available export options:
-
-{{ image("admin/export_options.png", "Export Dialog") }}
-
-## Plugin Support
-
-InvenTree plugins can also provide custom export functionality for specific data types. If a plugin provides export functionality, it will be listed in the export options.
-
-Refer to the [export plugin mixin documentation](../plugins/mixins/export.md) for more information on how to create export plugins.
-
-## API Export
-
-Data can also be exported via the InvenTree REST API, by appending the appropriate format suffix (and other export options) to the API endpoint URL.
diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md
index c729c61bb4..752ef1b910 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") }}
@@ -158,6 +162,7 @@ Configuration of label printing:
{{ globalsetting("PART_ALLOW_DUPLICATE_IPN") }}
{{ globalsetting("PART_ALLOW_EDIT_IPN") }}
{{ globalsetting("PART_ALLOW_DELETE_FROM_ASSEMBLY") }}
+{{ globalsetting("PART_ENABLE_LOCKING") }}
{{ globalsetting("PART_ENABLE_REVISION") }}
{{ globalsetting("PART_REVISION_ASSEMBLY_ONLY") }}
{{ globalsetting("PART_NAME_FORMAT") }}
@@ -206,6 +211,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 +242,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/permissions.md b/docs/docs/settings/permissions.md
index d6b717ed62..6e169af8f5 100644
--- a/docs/docs/settings/permissions.md
+++ b/docs/docs/settings/permissions.md
@@ -28,7 +28,8 @@ InvenTree functionality is split into a number of distinct roles. A group will h
| Role | Description |
| ---- | ----------- |
| **Admin** | The *admin* role is related to assigning user permissions. |
-| **Build** | The *build* role is related to accessing Build Order and Bill of Materials data |
+| **BOM** | The *bom* role is related to accessing Bill of Materials data |
+| **Build** | The *build* role is related to accessing manufacturing / Build Order |
| **Part** | The *part* role is related to accessing Part data |
| **Part Category** | The *part category* role is related to accessing Part Category data |
| **Purchase Order** | The *purchase* role is related to accessing Purchase Order data |
diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md
index faaa7aae8a..fc8a1664cb 100644
--- a/docs/docs/settings/user.md
+++ b/docs/docs/settings/user.md
@@ -27,8 +27,10 @@ The *Display Settings* screen shows general display configuration options:
{{ usersetting("FORMS_CLOSE_USING_ESCAPE") }}
{{ usersetting("DISPLAY_STOCKTAKE_TAB") }}
{{ usersetting("SHOW_FULL_CATEGORY_IN_TABLES")}}
+{{ 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/start/installer.md b/docs/docs/start/installer.md
index 997a0fefc8..55f367bc90 100644
--- a/docs/docs/start/installer.md
+++ b/docs/docs/start/installer.md
@@ -3,9 +3,15 @@ title: InvenTree Installer
---
## Installer
+
The InvenTree installer automates the installation procedure for a production InvenTree server.
-Supported OSs are Debian 10, 11, 12 and Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS.
+The installer supports the following Linux distributions:
+
+- Debian 11, 12
+- Ubuntu 22.04 LTS, 24.04 LTS
+
+Support for other OS versions is not currently planned. If you are using a different distribution, you can still follow the [docker](./docker.md) or [bare metal](./install.md) installation instructions.
### Quick Script
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 a79df4ce30..a2827bb068 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -87,7 +87,7 @@ nav:
- Project Details:
- Governance: project/governance.md
- Project Security: security.md
- - Resources: project/resources.md
+ - Sponsored Resources: project/sponsored_resources.md
- Privacy: privacy.md
- Concepts:
- Terminology: concepts/terminology.md
@@ -96,6 +96,8 @@ nav:
- Physical Units: concepts/units.md
- Companies: concepts/company.md
- Custom States: concepts/custom_states.md
+ - Data Export: concepts/data_export.md
+ - Data Import: concepts/data_import.md
- Pricing: concepts/pricing.md
- Project Codes: concepts/project_codes.md
- Attachments: concepts/attachments.md
@@ -145,11 +147,13 @@ 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
- Build Orders: manufacturing/build.md
- Build Outputs: manufacturing/output.md
+ - Required Quantity: manufacturing/required.md
- Allocating Stock: manufacturing/allocate.md
- External Manufacturing: manufacturing/external.md
- Example Build Order: manufacturing/example.md
@@ -184,8 +188,6 @@ nav:
- Multi Factor Authentication: settings/MFA.md
- Email Settings: settings/email.md
- Experimental Features: settings/experimental.md
- - Export Data: settings/export.md
- - Import Data: settings/import.md
- Operations:
- Background Tasks: settings/tasks.md
- Error Logs: settings/logs.md
@@ -263,6 +265,7 @@ nav:
- Stock: app/stock.md
- Purchase Orders: app/po.md
- Sales Orders: app/so.md
+ - Build Orders: app/build.md
- Settings: app/settings.md
- Privacy: app/privacy.md
- Translation: app/translation.md
diff --git a/docs/requirements.in b/docs/requirements.in
index 708b250cba..0718a16e75 100644
--- a/docs/requirements.in
+++ b/docs/requirements.in
@@ -1,10 +1,10 @@
mkdocs==1.6.1
mkdocs-macros-plugin>=0.7,<2.0
mkdocs-material>=9.0,<10.0
-mkdocs-git-revision-date-localized-plugin>=1.1,<2.0
+mkdocs-git-revision-date-localized-plugin>=1.5.2,<2.0
mkdocs-redirects
mkdocs-simple-hooks>=0.1,<1.0
mkdocs-include-markdown-plugin
neoteroi-mkdocs
-mkdocstrings[python]>=0.25.0,<=1.0.3
+mkdocstrings[python]<=1.0.4,>=1.0.4
mkdocs-mermaid2-plugin
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 47d6d7fbfa..98c237c7e4 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.46 \
- --hash=sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f \
- --hash=sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058
+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
@@ -261,9 +261,9 @@ markdown==3.10.2 \
# mkdocstrings
# properdocs
# pymdown-extensions
-markdown-it-py==4.0.0 \
- --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
- --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
+markdown-it-py==4.2.0 \
+ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \
+ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a
# via rich
markupsafe==3.0.3 \
--hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \
@@ -398,13 +398,13 @@ mkdocs-get-deps==0.2.2 \
--hash=sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1 \
--hash=sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650
# via mkdocs
-mkdocs-git-revision-date-localized-plugin==1.5.1 \
- --hash=sha256:2b0239455cd84784dd87ac8dfc9253fe4b2dd35e102696f21b5d34e2175981c6 \
- --hash=sha256:b00fd36ed0f9b2326b1488fd8fa31bf2ce64e68c4aa60a9ce857f10719571903
+mkdocs-git-revision-date-localized-plugin==1.5.2 \
+ --hash=sha256:0b3d65abdb8b82591d724c1d5ece6af7bb3cd305bdd47e2fadd430886a9a2513 \
+ --hash=sha256:4f3175e039bc4fe0055cac97d295ce8d0d233a13d65986d42fd5324e4985acc2
# via -r docs/requirements.in
-mkdocs-include-markdown-plugin==7.2.2 \
- --hash=sha256:f052ccb741eccf498116b826c1d78a2d761c56747372594709441cee0963fbc9 \
- --hash=sha256:f2ec4487cf32d3e33ca528f9366f20fb9280ded9c8d1630eb2bbda244962dcd1
+mkdocs-include-markdown-plugin==7.3.0 \
+ --hash=sha256:2800126746452e31c2e321bbd43c8190b356e0de353e20cbc16a34a3c3d6796c \
+ --hash=sha256:5b5c99b5d3c9b9ce0114a9e60353bbafb6be53a26c2d3b74ec6b767a7a8e55ca
# via -r docs/requirements.in
mkdocs-macros-plugin==1.5.0 \
--hash=sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f \
@@ -430,9 +430,9 @@ mkdocs-simple-hooks==0.1.5 \
--hash=sha256:dddbdf151a18723c9302a133e5cf79538be8eb9d274e8e07d2ac3ac34890837c \
--hash=sha256:efeabdbb98b0850a909adee285f3404535117159d5cb3a34f541d6eaa644d50a
# via -r docs/requirements.in
-mkdocstrings[python]==1.0.3 \
- --hash=sha256:0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046 \
- --hash=sha256:ab670f55040722b49bb45865b2e93b824450fb4aef638b00d7acb493a9020434
+mkdocstrings[python]==1.0.4 \
+ --hash=sha256:3969a6515b77db65fd097b53c1b7aa4ae840bd71a2ee62a6a3e89503446d7172 \
+ --hash=sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b
# via
# -r docs/requirements.in
# mkdocstrings-python
@@ -444,9 +444,9 @@ neoteroi-mkdocs==1.2.0 \
--hash=sha256:58e25cb1b9db093ffa8d12bdb33264bf567cac30fb964b56e0a493efa749ad6e \
--hash=sha256:91b6aa95a4e46c9bb93e00e021d2044cb0c7d80c0b4600434ff8f440d613a0a8
# via -r docs/requirements.in
-packaging==26.0 \
- --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
- --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
+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
@@ -583,17 +583,17 @@ pyyaml-env-tag==1.1 \
# via
# mkdocs
# properdocs
-requests==2.33.1 \
- --hash=sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517 \
- --hash=sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a
+requests==2.34.2 \
+ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \
+ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed
# via
# -c src/backend/requirements.txt
# mkdocs-macros-plugin
# mkdocs-material
# mkdocs-mermaid2-plugin
-rich==14.3.3 \
- --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
- --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
+rich==15.0.0 \
+ --hash=sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb \
+ --hash=sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36
# via neoteroi-mkdocs
setuptools==82.0.1 \
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
@@ -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 9ce50f3710..169e5a1f89 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -109,16 +109,18 @@ unresolved-reference="ignore" # 21 # see https://github.com/astral-sh/ty/issues
unresolved-attribute="ignore" # 505 # need Plugin Mixin typing
call-non-callable="ignore" # 8 ##
invalid-assignment="ignore" # 17 # need to wait for better django field stubs
-invalid-method-override="ignore" # 99
+# invalid-method-override="ignore" # 99
invalid-return-type="ignore" # 22 ##
-possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164
+# possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164
unknown-argument="ignore" # 3 # need to wait for better django field stubs
invalid-argument-type="ignore" # 49
no-matching-overload="ignore" # 3 # need to wait for betterdjango field stubs
+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 0b03d4790a..68c7f97f70 100644
--- a/src/backend/InvenTree/InvenTree/api_version.py
+++ b/src/backend/InvenTree/InvenTree/api_version.py
@@ -1,13 +1,70 @@
"""InvenTree API version information."""
# InvenTree API version
-INVENTREE_API_VERSION = 479
+INVENTREE_API_VERSION = 496
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
INVENTREE_API_TEXT = """
+v496 -> 2026-05-26 : https://github.com/inventree/InvenTree/pull/12011
+ - Add "creation_date" field to the StockItem API endpoint
+
+v495 -> 2026-05-25 : https://github.com/inventree/InvenTree/pull/12000
+ - Adds "auto-allocate" API endpoint for sales orders
+ - Allow bulk-delete of SalesOrderAllocation objects via the API
+ - Add new allocation options to the Build auto-allocate API endpoint
+
+v494 -> 2026-05-23 : https://github.com/inventree/InvenTree/pull/11990
+ - Offload build output operations to a background task, and return a task ID which can be used to monitor the progress of the task
+
+v493 -> 2026-05-22 : 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
+
+v481 -> 2026-04-28 : https://github.com/inventree/InvenTree/pull/11825
+ - Adds new "bom" ruleset and associated permissions for BOM management, separate from the "part" ruleset which remains focused on part management
+
+v480 -> 2026-04-27 : https://github.com/inventree/InvenTree/pull/11816
+ - The "issued_by" field on the Build API endpoint is now read-only, and is automatically set to the current user when a build is created
+
v479 -> 2026-04-11 : https://github.com/inventree/InvenTree/pull/11723
- - POST /api//notifications/readall/ now requires a POST action
+ - POST /api/notifications/readall/ now requires a POST action
- POST /api/admin/email/test/ - now returns a 200 on. a successful test
- GET /api/notifications/ - now uses user-centric permissions, not a general read
diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py
index a4947de545..aa54bb6014 100644
--- a/src/backend/InvenTree/InvenTree/config.py
+++ b/src/backend/InvenTree/InvenTree/config.py
@@ -9,7 +9,7 @@ import shutil
import string
import sys
from pathlib import Path
-from typing import Optional
+from typing import Any, Optional
logger = logging.getLogger('inventree')
CONFIG_DATA = None
@@ -254,6 +254,24 @@ def do_typecast(value, type, var_name=None):
return value
+def get_config_value(config_key: str) -> Optional[Any]:
+ """Helper function to retrieve a configuration value from the config file."""
+ cfg_data = load_config_data()
+
+ result = None
+
+ # Hack to allow 'path traversal' in configuration file
+ for key in config_key.strip().split('.'):
+ if type(cfg_data) is not dict or key not in cfg_data:
+ result = None
+ break
+
+ result = cfg_data[key]
+ cfg_data = cfg_data[key]
+
+ return result
+
+
def get_setting(env_var=None, config_key=None, default_value=None, typecast=None):
"""Helper function for retrieving a configuration setting value.
@@ -291,18 +309,7 @@ def get_setting(env_var=None, config_key=None, default_value=None, typecast=None
# Next, try to load from configuration file
if config_key is not None:
- cfg_data = load_config_data()
-
- result = None
-
- # Hack to allow 'path traversal' in configuration file
- for key in config_key.strip().split('.'):
- if type(cfg_data) is not dict or key not in cfg_data:
- result = None
- break
-
- result = cfg_data[key]
- cfg_data = cfg_data[key]
+ result = get_config_value(config_key)
if result is not None:
set_metadata('yaml')
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/ready.py b/src/backend/InvenTree/InvenTree/ready.py
index 745d77cfda..8007e30a81 100644
--- a/src/backend/InvenTree/InvenTree/ready.py
+++ b/src/backend/InvenTree/InvenTree/ready.py
@@ -37,7 +37,9 @@ def isAppLoaded(app_name: str) -> bool:
def isInTestMode():
"""Returns True if the database is in testing mode."""
- return 'test' in sys.argv or sys.argv[0].endswith('pytest')
+ return any(x in sys.argv for x in ['test', 'pytest']) or sys.argv[0].endswith(
+ 'pytest'
+ )
def isWaitingForDatabase():
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 f053d4d7bd..3cedea07d4 100644
--- a/src/backend/InvenTree/InvenTree/setting/db_backend.py
+++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py
@@ -4,23 +4,44 @@ from pathlib import Path
import structlog
-from InvenTree.config import get_boolean_setting, get_setting
+from InvenTree.config import get_boolean_setting, get_config_value, get_setting
logger = structlog.get_logger('inventree')
def get_db_backend():
"""Return the database backend configuration."""
+ # For the core database configuration values, we test for UPPERCASE configuration values as a backup,
+ # due to legacy reasons (original config files were uppercase,
+ # but we moved to lowercase for consistency with other settings.
+
db_config = {
- 'ENGINE': get_setting('INVENTREE_DB_ENGINE', 'database.engine', None),
- 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', None),
- 'USER': get_setting('INVENTREE_DB_USER', 'database.user', None),
- 'PASSWORD': get_setting('INVENTREE_DB_PASSWORD', 'database.password', None),
- 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', None),
- 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', 5432, typecast=int),
+ 'ENGINE': get_setting(
+ 'INVENTREE_DB_ENGINE', 'database.engine', '', typecast=str
+ )
+ or get_config_value('database.ENGINE')
+ or '',
+ 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', '', typecast=str)
+ or get_config_value('database.NAME')
+ or '',
+ 'USER': get_setting('INVENTREE_DB_USER', 'database.user', '', typecast=str)
+ or get_config_value('database.USER')
+ or '',
+ 'PASSWORD': get_setting(
+ 'INVENTREE_DB_PASSWORD', 'database.password', '', typecast=str
+ )
+ or get_config_value('database.PASSWORD')
+ or '',
+ 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', '', typecast=str)
+ or get_config_value('database.HOST')
+ or '',
+ 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', '', typecast=str)
+ or get_config_value('database.PORT')
+ or '',
'OPTIONS': get_setting(
'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict
)
+ or get_config_value('database.OPTIONS')
or {},
}
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/api.py b/src/backend/InvenTree/build/api.py
index 232b7adca7..3a1455306b 100644
--- a/src/backend/InvenTree/build/api.py
+++ b/src/backend/InvenTree/build/api.py
@@ -386,6 +386,20 @@ class BuildList(
kwargs['create'] = True
return super().get_serializer(*args, **kwargs)
+ def create(self, request, *args, **kwargs):
+ """Save user information on order creation."""
+ serializer = self.get_serializer(data=self.clean_data(request.data))
+ serializer.is_valid(raise_exception=True)
+
+ build = serializer.save()
+ build.issued_by = request.user
+ build.save()
+
+ headers = self.get_success_headers(serializer.data)
+ return Response(
+ serializer.data, status=status.HTTP_201_CREATED, headers=headers
+ )
+
class BuildDetail(BuildMixin, RetrieveUpdateDestroyAPI):
"""API endpoint for detail view of a Build object."""
@@ -721,14 +735,81 @@ class BuildOutputScrap(BuildOrderContextMixin, CreateAPI):
ctx['to_complete'] = False
return ctx
+ @extend_schema(responses={200: common.serializers.TaskDetailSerializer})
+ def post(self, *args, **kwargs):
+ """Override POST to offload scrapping to the background worker."""
+ from build.tasks import scrap_build_outputs
+ from InvenTree.tasks import offload_task
+
+ build = self.get_build()
+ serializer = self.get_serializer(data=self.request.data)
+ serializer.is_valid(raise_exception=True)
+ data = serializer.validated_data
+
+ task_id = offload_task(
+ scrap_build_outputs,
+ build.pk,
+ outputs=[
+ {
+ 'output_id': item['output'].pk,
+ 'quantity': float(item['quantity'])
+ if item.get('quantity') is not None
+ else None,
+ }
+ for item in data['outputs']
+ ],
+ location_id=data['location'].pk,
+ notes=data.get('notes', ''),
+ discard_allocations=data.get('discard_allocations', False),
+ user_id=self.request.user.pk,
+ group='build',
+ )
+
+ response = common.serializers.TaskDetailSerializer.from_task(task_id).data
+ return Response(response, status=response['http_status'])
+
class BuildOutputComplete(BuildOrderContextMixin, CreateAPI):
"""API endpoint for completing build outputs."""
queryset = Build.objects.none()
-
serializer_class = build.serializers.BuildOutputCompleteSerializer
+ @extend_schema(responses={200: common.serializers.TaskDetailSerializer})
+ def post(self, *args, **kwargs):
+ """Override POST to offload build output completion to the background worker."""
+ from build.tasks import complete_build_outputs
+ from InvenTree.tasks import offload_task
+
+ build = self.get_build()
+ serializer = self.get_serializer(data=self.request.data)
+ serializer.is_valid(raise_exception=True)
+ data = serializer.validated_data
+
+ location = data.get('location')
+
+ task_id = offload_task(
+ complete_build_outputs,
+ build.pk,
+ outputs=[
+ {
+ 'output_id': item['output'].pk,
+ 'quantity': float(item['quantity'])
+ if item.get('quantity') is not None
+ else None,
+ }
+ for item in data['outputs']
+ ],
+ location_id=location.pk if location else None,
+ status=data.get('status_custom_key'),
+ notes=data.get('notes', ''),
+ user_id=self.request.user.pk,
+ group='build',
+ )
+
+ response = common.serializers.TaskDetailSerializer.from_task(task_id).data
+ return Response(response, status=response['http_status'])
+
class BuildOutputDelete(BuildOrderContextMixin, CreateAPI):
"""API endpoint for deleting multiple build outputs."""
@@ -736,15 +817,33 @@ class BuildOutputDelete(BuildOrderContextMixin, CreateAPI):
def get_serializer_context(self):
"""Add extra context information to the endpoint serializer."""
ctx = super().get_serializer_context()
-
ctx['to_complete'] = False
-
return ctx
queryset = Build.objects.none()
-
serializer_class = build.serializers.BuildOutputDeleteSerializer
+ @extend_schema(responses={200: common.serializers.TaskDetailSerializer})
+ def post(self, *args, **kwargs):
+ """Override POST to offload build output deletion to the background worker."""
+ from build.tasks import delete_build_outputs
+ from InvenTree.tasks import offload_task
+
+ build = self.get_build()
+ serializer = self.get_serializer(data=self.request.data)
+ serializer.is_valid(raise_exception=True)
+ data = serializer.validated_data
+
+ task_id = offload_task(
+ delete_build_outputs,
+ build.pk,
+ output_ids=[item['output'].pk for item in data['outputs']],
+ group='build',
+ )
+
+ response = common.serializers.TaskDetailSerializer.from_task(task_id).data
+ return Response(response, status=response['http_status'])
+
class BuildFinish(BuildOrderContextMixin, CreateAPI):
"""API endpoint for marking a build as finished (completed)."""
@@ -787,6 +886,8 @@ class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI):
serializer.is_valid(raise_exception=True)
data = serializer.validated_data
+ build_lines = data.get('build_lines', [])
+
# Offload the task to the background worker
task_id = offload_task(
auto_allocate_build,
@@ -797,6 +898,8 @@ class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI):
substitutes=data['substitutes'],
optional_items=data['optional_items'],
item_type=data.get('item_type', 'untracked'),
+ stock_sort_by=data['stock_sort_by'],
+ line_ids=[line.pk for line in build_lines] if build_lines else None,
group='build',
)
diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py
index 39018c661a..dfcf26e0b4 100644
--- a/src/backend/InvenTree/build/models.py
+++ b/src/backend/InvenTree/build/models.py
@@ -37,7 +37,6 @@ from build.validators import (
validate_build_order_reference,
)
from common.models import ProjectCode
-from common.notifications import InvenTreeNotificationBodies, trigger_notification
from common.settings import (
get_global_setting,
prevent_build_output_complete_on_incompleted_tests,
@@ -403,6 +402,14 @@ class Build(
related_name='builds_issued',
)
+ @property
+ def created_by(self):
+ """Alias for issued_by field.
+
+ This is used for compatibility with the order models
+ """
+ return self.issued_by
+
responsible = models.ForeignKey(
users.models.Owner,
on_delete=models.SET_NULL,
@@ -643,7 +650,6 @@ class Build(
return self.is_fully_allocated(tracked=False)
- @transaction.atomic
def complete_allocations(self, user) -> None:
"""Complete all stock allocations for this build order.
@@ -654,7 +660,7 @@ class Build(
# Ensure that there are no longer any BuildItem objects
# which point to this Build Order
- self.allocated_stock.delete()
+ self.allocated_stock.all().delete()
@transaction.atomic
def complete_build(self, user: User, trim_allocated_stock: bool = False):
@@ -694,66 +700,20 @@ class Build(
_('Cannot complete build order with incomplete outputs')
)
- if trim_allocated_stock:
- self.trim_allocated_stock()
+ # Offload background task to complete build allocations
+ InvenTree.tasks.offload_task(
+ build.tasks.complete_build,
+ self.pk,
+ user.pk if user else None,
+ trim_allocated_stock=trim_allocated_stock,
+ group='build',
+ )
self.completion_date = InvenTree.helpers.current_date()
self.completed_by = user
self.status = BuildStatus.COMPLETE.value
self.save()
- # Offload task to complete build allocations
- if not InvenTree.tasks.offload_task(
- build.tasks.complete_build_allocations,
- self.pk,
- user.pk if user else None,
- group='build',
- ):
- raise ValidationError(
- _('Failed to offload task to complete build allocations')
- )
-
- # Register an event
- trigger_event(BuildEvents.COMPLETED, id=self.pk)
-
- # Notify users that this build has been completed
- targets = [self.issued_by, self.responsible]
-
- # Also inform anyone subscribed to the assembly part
- targets.extend(self.part.get_subscribers())
-
- # Notify those users interested in the parent build
- if self.parent:
- targets.append(self.parent.issued_by)
- targets.append(self.parent.responsible)
-
- # Notify users if this build points to a sales order
- if self.sales_order:
- targets.append(self.sales_order.created_by)
- targets.append(self.sales_order.responsible)
-
- build = self
- name = _(f'Build order {build} has been completed')
-
- context = {
- 'build': build,
- 'name': name,
- 'slug': 'build.completed',
- 'message': _('A build order has been completed'),
- 'link': InvenTree.helpers_model.construct_absolute_url(
- self.get_absolute_url()
- ),
- 'template': {'html': 'email/build_order_completed.html', 'subject': name},
- }
-
- trigger_notification(
- build,
- 'build.completed',
- targets=targets,
- context=context,
- target_exclude=[user],
- )
-
@transaction.atomic
def issue_build(self):
"""Mark the Build as IN PRODUCTION.
@@ -831,26 +791,15 @@ class Build(
remove_allocated_stock = kwargs.get('remove_allocated_stock', False)
remove_incomplete_outputs = kwargs.get('remove_incomplete_outputs', False)
- if remove_allocated_stock:
- # Offload task to remove allocated stock
- if not InvenTree.tasks.offload_task(
- build.tasks.complete_build_allocations,
- self.pk,
- user.pk if user else None,
- group='build',
- ):
- raise ValidationError(
- _('Failed to offload task to complete build allocations')
- )
-
- else:
- self.allocated_stock.all().delete()
-
- # Remove incomplete outputs (if required)
- if remove_incomplete_outputs:
- outputs = self.build_outputs.filter(is_building=True)
-
- outputs.delete()
+ # Offload background task to take care of the expensive operations
+ InvenTree.tasks.offload_task(
+ build.tasks.cancel_build,
+ self.pk,
+ user.pk if user else None,
+ remove_allocated_stock=remove_allocated_stock,
+ remove_incomplete_outputs=remove_incomplete_outputs,
+ group='build',
+ )
# Date of 'completion' is the date the build was cancelled
self.completion_date = InvenTree.helpers.current_date()
@@ -859,17 +808,6 @@ class Build(
self.status = BuildStatus.CANCELLED.value
self.save()
- # Notify users that the order has been canceled
- InvenTree.helpers_model.notify_responsible(
- self,
- Build,
- exclude=self.issued_by,
- content=InvenTreeNotificationBodies.OrderCanceled,
- extra_users=self.part.get_subscribers(),
- )
-
- trigger_event(BuildEvents.CANCELLED, id=self.pk)
-
@transaction.atomic
def deallocate_stock(self, build_line=None, output=None):
"""Deallocate stock from this Build.
@@ -967,10 +905,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."""
@@ -1025,7 +963,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):
@@ -1073,7 +1013,6 @@ class Build(
"""Returns a QuerySet object of all BuildItem objects which point back to this Build."""
return BuildItem.objects.filter(build_line__build=self)
- @transaction.atomic
def subtract_allocated_stock(self, user) -> None:
"""Removes the allocated untracked items from stock."""
# Find all BuildItem objects which point to this build
@@ -1381,7 +1320,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.
@@ -1403,6 +1342,8 @@ class Build(
interchangeable = kwargs.get('interchangeable', False)
substitutes = kwargs.get('substitutes', True)
optional_items = kwargs.get('optional_items', False)
+ stock_sort_by = kwargs.get('stock_sort_by', stock.models.STOCK_SORT_DEFAULT)
+ line_ids = kwargs.get('line_ids')
def stock_sort(item, bom_item, variant_parts):
if item.part == bom_item.sub_part:
@@ -1414,7 +1355,11 @@ class Build(
new_items = []
# Select only "untracked" line items
- for line_item in self.untracked_line_items.all():
+ untracked_lines = self.untracked_line_items.all()
+ if line_ids:
+ untracked_lines = untracked_lines.filter(pk__in=line_ids)
+
+ for line_item in untracked_lines:
# Find the referenced BomItem
bom_item = line_item.bom_item
@@ -1471,13 +1416,22 @@ class Build(
location__in=list(sublocations)
)
+ # Apply secondary ORM ordering before the Python match-quality stable-sort.
+ if stock_sort_by == stock.models.StockSortOrder.EXPIRY_SOONEST:
+ available_stock = available_stock.order_by(
+ F('expiry_date').asc(nulls_last=True)
+ )
+ else:
+ available_stock = available_stock.order_by(stock_sort_by)
+
"""
Next, we sort the available stock items with the following priority:
1. Direct part matches (+1)
2. Variant part matches (+2)
3. Substitute part matches (+3)
- This ensures that allocation priority is first given to "direct" parts
+ This ensures that allocation priority is first given to "direct" parts.
+ Python's stable sort preserves the secondary ORM ordering within each group.
"""
available_stock = sorted(
available_stock,
@@ -1522,7 +1476,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."""
@@ -1647,7 +1601,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/serializers.py b/src/backend/InvenTree/build/serializers.py
index 724182c978..888ad883bd 100644
--- a/src/backend/InvenTree/build/serializers.py
+++ b/src/backend/InvenTree/build/serializers.py
@@ -27,6 +27,7 @@ import company.serializers
import InvenTree.helpers
import part.filters
import part.serializers as part_serializers
+import stock.models as stock_models
from common.settings import get_global_setting
from generic.states.fields import InvenTreeCustomStatusSerializerMixin
from InvenTree.mixins import DataImportExportSerializerMixin
@@ -104,7 +105,8 @@ class BuildSerializer(
read_only_fields = [
'completed',
'creation_date',
- 'completion_data',
+ 'issued_by',
+ 'completion_date',
'status',
'status_text',
'level',
@@ -461,18 +463,6 @@ class BuildOutputDeleteSerializer(serializers.Serializer):
return data
- def save(self):
- """'save' the serializer to delete the build outputs."""
- data = self.validated_data
- outputs = data.get('outputs', [])
-
- build = self.context['build']
-
- with transaction.atomic():
- for item in outputs:
- output = item['output']
- build.delete_output(output)
-
class BuildOutputScrapSerializer(serializers.Serializer):
"""Scrapping one or more build outputs."""
@@ -517,27 +507,6 @@ class BuildOutputScrapSerializer(serializers.Serializer):
return data
- def save(self):
- """Save the serializer to scrap the build outputs."""
- build = self.context['build']
- request = self.context.get('request')
- data = self.validated_data
- outputs = data.get('outputs', [])
-
- # Scrap the build outputs
- with transaction.atomic():
- for item in outputs:
- output = item['output']
- quantity = item.get('quantity', None)
- build.scrap_build_output(
- output,
- quantity,
- data.get('location', None),
- user=request.user if request else None,
- notes=data.get('notes', ''),
- discard_allocations=data.get('discard_allocations', False),
- )
-
class BuildOutputCompleteSerializer(serializers.Serializer):
"""DRF serializer for completing one or more build outputs."""
@@ -609,42 +578,6 @@ class BuildOutputCompleteSerializer(serializers.Serializer):
return data
- def save(self):
- """Save the serializer to complete the build outputs."""
- build = self.context['build']
- request = self.context.get('request')
-
- data = self.validated_data
-
- location = data.get('location', None)
- status = data.get('status_custom_key', StockStatus.OK.value)
- notes = data.get('notes', '')
-
- outputs = data.get('outputs', [])
-
- # Cache some calculated values which can be passed to each output
- required_tests = outputs[0]['output'].part.getRequiredTests()
- prevent_on_incomplete = (
- common.settings.prevent_build_output_complete_on_incompleted_tests()
- )
-
- # Mark the specified build outputs as "complete"
- with transaction.atomic():
- for item in outputs:
- output = item['output']
- quantity = item.get('quantity', None)
-
- build.complete_build_output(
- output,
- request.user if request else None,
- quantity=quantity,
- location=location,
- status=status,
- notes=notes,
- required_tests=required_tests,
- prevent_on_incomplete=prevent_on_incomplete,
- )
-
class BuildIssueSerializer(serializers.Serializer):
"""DRF serializer for issuing a build order."""
@@ -1133,6 +1066,24 @@ class BuildAutoAllocationSerializer(serializers.Serializer):
help_text=_('Select item type to auto-allocate'),
)
+ stock_sort_by = serializers.ChoiceField(
+ default=stock_models.STOCK_SORT_DEFAULT,
+ choices=stock_models.STOCK_SORT_CHOICES,
+ label=_('Stock Priority'),
+ help_text=_('Preferred order in which matching stock items are consumed'),
+ )
+
+ build_lines = serializers.PrimaryKeyRelatedField(
+ queryset=BuildLine.objects.all(),
+ many=True,
+ required=False,
+ default=list,
+ label=_('Build Lines'),
+ help_text=_(
+ 'Limit allocation to these build lines (leave blank to allocate all lines)'
+ ),
+ )
+
class BuildItemSerializer(
FilterableSerializerMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
diff --git a/src/backend/InvenTree/build/tasks.py b/src/backend/InvenTree/build/tasks.py
index 363dac3e19..0dcac04bb8 100644
--- a/src/backend/InvenTree/build/tasks.py
+++ b/src/backend/InvenTree/build/tasks.py
@@ -100,6 +100,214 @@ def complete_build_allocations(build_id: int, user_id: int):
build_order.complete_allocations(user)
+@tracer.start_as_current_span('delete_build_outputs')
+def delete_build_outputs(build_id: int, output_ids: list, **kwargs):
+ """Delete (cancel) specified build outputs for a BuildOrder.
+
+ Arguments:
+ build_id: The ID of the BuildOrder
+ output_ids: List of StockItem PKs to delete
+ """
+ from build.models import Build
+ from stock.models import StockItem
+
+ build = Build.objects.get(pk=build_id)
+
+ with transaction.atomic():
+ for output_id in output_ids:
+ output = StockItem.objects.filter(pk=output_id).first()
+ if output:
+ build.delete_output(output)
+
+
+@tracer.start_as_current_span('scrap_build_outputs')
+def scrap_build_outputs(
+ build_id: int,
+ outputs: list,
+ location_id: int,
+ notes: str = '',
+ discard_allocations: bool = False,
+ user_id: int | None = None,
+ **kwargs,
+):
+ """Scrap specified build outputs for a BuildOrder.
+
+ Arguments:
+ build_id: The ID of the BuildOrder
+ outputs: List of dicts with 'output_id' and 'quantity'
+ location_id: PK of the destination StockLocation
+ notes: Reason for scrapping
+ discard_allocations: If True, discard (not consume) allocations
+ user_id: PK of the user initiating the action
+ """
+ from build.models import Build
+ from stock.models import StockItem, StockLocation
+
+ build = Build.objects.get(pk=build_id)
+ location = StockLocation.objects.get(pk=location_id)
+ user = User.objects.filter(pk=user_id).first() if user_id else None
+
+ with transaction.atomic():
+ for item in outputs:
+ output = StockItem.objects.filter(pk=item['output_id']).first()
+ if output:
+ build.scrap_build_output(
+ output,
+ item.get('quantity'),
+ location,
+ user=user,
+ notes=notes,
+ discard_allocations=discard_allocations,
+ )
+
+
+@tracer.start_as_current_span('complete_build_outputs')
+def complete_build_outputs(
+ build_id: int,
+ outputs: list,
+ location_id: int | None,
+ status: int,
+ notes: str = '',
+ user_id: int | None = None,
+ **kwargs,
+):
+ """Complete specified build outputs for a BuildOrder.
+
+ Arguments:
+ build_id: The ID of the BuildOrder
+ outputs: List of dicts with 'output_id' and optional 'quantity'
+ location_id: PK of the destination StockLocation (or None)
+ status: Stock status code to assign to completed outputs
+ notes: Completion notes
+ user_id: PK of the user initiating the action
+ """
+ from build.models import Build
+ from stock.models import StockItem, StockLocation
+
+ build = Build.objects.get(pk=build_id)
+ location = (
+ StockLocation.objects.filter(pk=location_id).first() if location_id else None
+ )
+ user = User.objects.filter(pk=user_id).first() if user_id else None
+
+ required_tests = build.part.getRequiredTests()
+
+ with transaction.atomic():
+ for item in outputs:
+ output = StockItem.objects.filter(pk=item['output_id']).first()
+ if output:
+ build.complete_build_output(
+ output,
+ user,
+ quantity=item.get('quantity'),
+ location=location,
+ status=status,
+ notes=notes,
+ required_tests=required_tests,
+ )
+
+
+@tracer.start_as_current_span('cancel_build')
+def cancel_build(
+ build_id: int,
+ user_id: int,
+ remove_allocated_stock: bool = False,
+ remove_incomplete_outputs: bool = False,
+):
+ """Tasks to run after a BuildOrder is cancelled.
+
+ Arguments:
+ build_id: The ID of the BuildOrder which has been cancelled
+ user_id: The ID of the user who cancelled the BuildOrder
+ remove_allocated_stock: If True, consume any allocated stock
+ remove_incomplete_outputs: If True, delete any incomplete build outputs
+
+ """
+ from build.models import Build
+
+ build = Build.objects.get(pk=build_id)
+
+ if remove_allocated_stock:
+ complete_build_allocations(build_id, user_id)
+ else:
+ build.allocated_stock.all().delete()
+
+ if remove_incomplete_outputs:
+ build.build_outputs.filter(is_building=True).delete()
+
+ # Notify users that the order has been canceled
+ InvenTree.helpers_model.notify_responsible(
+ build,
+ Build,
+ exclude=build.issued_by,
+ content=common.notifications.InvenTreeNotificationBodies.OrderCanceled,
+ extra_users=build.part.get_subscribers(),
+ )
+
+ trigger_event(BuildEvents.CANCELLED, id=build.pk)
+
+
+@tracer.start_as_current_span('complete_build')
+def complete_build(build_id: int, user_id: int, trim_allocated_stock: bool = False):
+ """Tasks to run after a BuildOrder is completed.
+
+ Arguments:
+ build_id: The ID of the BuildOrder which has been completed
+ user_id: The ID of the user who completed the BuildOrder
+ trim_allocated_stock: If True, trim any allocated stock which was not consumed
+ """
+ from build.models import Build
+
+ build = Build.objects.get(pk=build_id)
+ user = User.objects.filter(pk=user_id).first() if user_id else None
+
+ if trim_allocated_stock:
+ build.trim_allocated_stock()
+
+ # Complete any remaining allocations for this build order
+ complete_build_allocations(build_id, user_id)
+
+ # Register an event
+ trigger_event(BuildEvents.COMPLETED, id=build.pk)
+
+ # Notify users that this build has been completed
+ targets = [build.issued_by, build.responsible]
+
+ # Also inform anyone subscribed to the assembly part
+ targets.extend(build.part.get_subscribers())
+
+ # Notify those users interested in the parent build
+ if build.parent:
+ targets.append(build.parent.issued_by)
+ targets.append(build.parent.responsible)
+
+ # Notify users if this build points to a sales order
+ if build.sales_order:
+ targets.append(build.sales_order.created_by)
+ targets.append(build.sales_order.responsible)
+
+ name = _(f'Build order {build} has been completed')
+
+ context = {
+ 'build': build,
+ 'name': name,
+ 'slug': 'build.completed',
+ 'message': _('A build order has been completed'),
+ 'link': InvenTree.helpers_model.construct_absolute_url(
+ build.get_absolute_url()
+ ),
+ 'template': {'html': 'email/build_order_completed.html', 'subject': name},
+ }
+
+ common.notifications.trigger_notification(
+ build,
+ 'build.completed',
+ targets=targets,
+ context=context,
+ target_exclude=[user],
+ )
+
+
@tracer.start_as_current_span('update_build_order_lines')
def update_build_order_lines(bom_item_pk: int):
"""Update all BuildOrderLineItem objects which reference a particular BomItem.
diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py
index e63a313238..5ba8824b3a 100644
--- a/src/backend/InvenTree/build/test_api.py
+++ b/src/backend/InvenTree/build/test_api.py
@@ -9,9 +9,10 @@ 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
+from stock.models import StockItem, StockLocation, StockSortOrder
from stock.status_codes import StockStatus
@@ -154,7 +155,7 @@ class BuildTest(BuildAPITest):
self.post(
reverse('api-build-output-complete', kwargs={'pk': 99999}),
{},
- expected_code=400,
+ expected_code=404,
)
data = self.post(self.url, {}, expected_code=400).data
@@ -225,8 +226,8 @@ class BuildTest(BuildAPITest):
'location': 1,
'status': StockStatus.ATTENTION.value,
},
- expected_code=201,
- max_query_count=400,
+ expected_code=200,
+ max_query_count=450,
)
self.assertEqual(self.build.incomplete_outputs.count(), 0)
@@ -445,7 +446,7 @@ class BuildTest(BuildAPITest):
self.post(
delete_url,
{'outputs': [{'output': output.pk} for output in outputs[1:3]]},
- expected_code=201,
+ expected_code=200,
)
# Two build outputs have been removed
@@ -472,7 +473,7 @@ class BuildTest(BuildAPITest):
'outputs': [{'output': output.pk} for output in outputs[3:]],
'location': 4,
},
- expected_code=201,
+ expected_code=200,
)
# Check that the outputs have been completed
@@ -568,6 +569,9 @@ class BuildTest(BuildAPITest):
self.assertEqual(bo.children.count(), 0)
+ self.assertIsNotNone(bo.issued_by)
+ self.assertEqual(bo.issued_by, self.user)
+
class BuildAllocationTest(BuildAPITest):
"""Unit tests for allocation of stock items against a build order.
@@ -1349,15 +1353,16 @@ class BuildOutputCreateTest(BuildAPITest):
url, data={'quantity': 5, 'serial_numbers': '1,2,3-5'}, expected_code=201
)
- # Build outputs have incdeased
+ # Build outputs have increased
self.assertEqual(n_outputs + 5, build.output_count)
# Stock items have increased
self.assertEqual(n_items + 5, part.stock_items.count())
- # Serial numbers have been created
+ # Serial numbers have been created, each with a creation_date
for sn in range(1, 6):
self.assertTrue(part.stock_items.filter(serial=sn).exists())
+ self.assertIsNotNone(part.stock_items.get(serial=sn).creation_date)
def test_create_unserialized_output(self):
"""Create an unserialized build output via the API."""
@@ -1379,6 +1384,9 @@ class BuildOutputCreateTest(BuildAPITest):
# Stock items have increased
self.assertEqual(n_items + 1, part.stock_items.count())
+ # The new output must have a creation_date set
+ self.assertIsNotNone(part.stock_items.order_by('-pk').first().creation_date)
+
class BuildOutputScrapTest(BuildAPITest):
"""Unit tests for scrapping build outputs."""
@@ -1462,7 +1470,7 @@ class BuildOutputScrapTest(BuildAPITest):
'location': 1,
'notes': 'Should succeed',
},
- expected_code=201,
+ expected_code=200,
)
# There should still be three outputs associated with this build
@@ -1530,7 +1538,7 @@ class BuildOutputScrapTest(BuildAPITest):
# Partially complete the output (with a valid quantity)
data['outputs'][0]['quantity'] = 4
- self.post(url, data, expected_code=201)
+ self.post(url, data, expected_code=200)
build.refresh_from_db()
output.refresh_from_db()
@@ -1545,6 +1553,53 @@ 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=200)
+
+ # 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)
+
+ response = self.post(
+ url, data={'outputs': [{'output': output_ids[1]}]}, expected_code=200
+ )
+
+ # Response should be the task info - the cancellation is performed asynchronously
+ self.assertIn('task_id', response.data)
+ self.assertFalse(response.data['exists'])
+ self.assertFalse(response.data['pending'])
+ self.assertTrue(response.data['complete'])
+ self.assertTrue(response.data['success'])
+
+ # 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."""
@@ -1760,3 +1815,162 @@ class BuildConsumeTest(BuildAPITest):
for line in self.build.build_lines.all():
self.assertEqual(line.consumed, 100)
+
+
+class BuildAutoAllocateAPITest(InvenTreeAPITestCase):
+ """API integration tests for BuildAutoAllocate endpoint back-ports (stock_sort_by, build_lines)."""
+
+ fixtures = ['company', 'users']
+
+ roles = ['build.add', 'build.change']
+
+ @classmethod
+ def setUpTestData(cls):
+ """Create shared parts, locations and build data for all tests."""
+ super().setUpTestData()
+
+ cls.assembly = Part.objects.create(
+ name='AutoAlloc Assembly', description='', assembly=True
+ )
+ cls.component = Part.objects.create(
+ name='AutoAlloc Component', description='', component=True
+ )
+ cls.component_b = Part.objects.create(
+ name='AutoAlloc Component B', description='', component=True
+ )
+
+ cls.loc_a = StockLocation.objects.create(name='BuildShelf A')
+ cls.loc_b = StockLocation.objects.create(name='BuildShelf B')
+
+ def _next_ref(self):
+ """Return a valid Build reference using the system-generated next value."""
+ return Build.generate_batch_code()
+
+ def _make_build(self, quantity=10):
+ """Create a fresh Build with one untracked BOM line (component only)."""
+ build = Build.objects.create(
+ part=self.assembly,
+ reference=f'BO-{9000 + Build.objects.count():04d}',
+ quantity=quantity,
+ )
+ BomItem.objects.create(part=self.assembly, sub_part=self.component, quantity=1)
+ build.create_build_line_items()
+ return build
+
+ def _url(self, pk):
+ return reverse('api-build-auto-allocate', kwargs={'pk': pk})
+
+ def _create_build_two_lines(self, quantity=5):
+ """Create a Build with two untracked BOM lines (component + component_b)."""
+ build = Build.objects.create(
+ part=self.assembly,
+ reference=f'BO-{9000 + Build.objects.count():04d}',
+ quantity=quantity,
+ )
+ BomItem.objects.create(part=self.assembly, sub_part=self.component, quantity=1)
+ BomItem.objects.create(
+ part=self.assembly, sub_part=self.component_b, quantity=1
+ )
+ build.create_build_line_items()
+ return build
+
+ # ------------------------------------------------------------------
+ # Validation
+ # ------------------------------------------------------------------
+
+ def test_invalid_stock_sort_by_rejected(self):
+ """An unrecognised stock_sort_by value is rejected with 400."""
+ build = self._make_build()
+ self.post(
+ self._url(build.pk), {'stock_sort_by': 'not_valid'}, expected_code=400
+ )
+
+ # ------------------------------------------------------------------
+ # stock_sort_by behaviour
+ # ------------------------------------------------------------------
+
+ def test_stock_sort_by_quantity_asc(self):
+ """stock_sort_by=QUANTITY_ASC consumes the smallest lot first."""
+ build = self._make_build(quantity=15)
+ small = StockItem.objects.create(part=self.component, quantity=5)
+ StockItem.objects.create(part=self.component, quantity=100)
+
+ self.post(
+ self._url(build.pk),
+ {
+ 'stock_sort_by': str(StockSortOrder.QUANTITY_ASC),
+ 'interchangeable': True,
+ },
+ expected_code=200,
+ )
+
+ allocs = BuildItem.objects.filter(build_line__build=build)
+ self.assertTrue(any(a.stock_item == small and a.quantity == 5 for a in allocs))
+
+ def test_stock_sort_by_quantity_desc(self):
+ """stock_sort_by=QUANTITY_DESC consumes the largest lot first, covering requirement in one allocation."""
+ build = self._make_build(quantity=15)
+ StockItem.objects.create(part=self.component, quantity=5)
+ large = StockItem.objects.create(part=self.component, quantity=100)
+
+ self.post(
+ self._url(build.pk),
+ {
+ 'stock_sort_by': str(StockSortOrder.QUANTITY_DESC),
+ 'interchangeable': True,
+ },
+ expected_code=200,
+ )
+
+ allocs = BuildItem.objects.filter(build_line__build=build)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().stock_item, large)
+ self.assertEqual(allocs.first().quantity, 15)
+
+ # ------------------------------------------------------------------
+ # build_lines filtering
+ # ------------------------------------------------------------------
+
+ def test_build_lines_subset_only_allocates_selected_lines(self):
+ """When build_lines is specified only those lines are allocated."""
+ build = self._create_build_two_lines()
+
+ StockItem.objects.create(part=self.component, quantity=50)
+ StockItem.objects.create(part=self.component_b, quantity=50)
+
+ line_a = build.build_lines.filter(bom_item__sub_part=self.component).first()
+
+ self.post(
+ self._url(build.pk),
+ {'build_lines': [line_a.pk], 'interchangeable': True},
+ expected_code=200,
+ )
+
+ alloc_a = BuildItem.objects.filter(
+ build_line__build=build, stock_item__part=self.component
+ )
+ alloc_b = BuildItem.objects.filter(
+ build_line__build=build, stock_item__part=self.component_b
+ )
+
+ self.assertTrue(alloc_a.exists())
+ self.assertFalse(alloc_b.exists())
+
+ def test_build_lines_empty_allocates_all(self):
+ """When build_lines is omitted, all untracked lines are allocated."""
+ build = self._create_build_two_lines()
+
+ StockItem.objects.create(part=self.component, quantity=50)
+ StockItem.objects.create(part=self.component_b, quantity=50)
+
+ self.post(self._url(build.pk), {'interchangeable': True}, expected_code=200)
+
+ alloc_a = BuildItem.objects.filter(
+ build_line__build=build, stock_item__part=self.component
+ )
+ alloc_b = BuildItem.objects.filter(
+ build_line__build=build, stock_item__part=self.component_b
+ )
+
+ self.assertTrue(alloc_a.exists())
+ self.assertTrue(alloc_b.exists())
diff --git a/src/backend/InvenTree/build/test_build.py b/src/backend/InvenTree/build/test_build.py
index 608bff91b4..5c571252ec 100644
--- a/src/backend/InvenTree/build/test_build.py
+++ b/src/backend/InvenTree/build/test_build.py
@@ -27,6 +27,7 @@ from InvenTree.unit_test import (
from order.models import PurchaseOrder, PurchaseOrderLineItem
from part.models import BomItem, BomItemSubstitute, Part, PartTestTemplate
from stock.models import StockItem, StockItemTestResult, StockLocation
+from stock.status_codes import StockStatus
from users.models import Owner
logger = structlog.get_logger('inventree')
@@ -557,14 +558,29 @@ class BuildTest(BuildTestBase):
bo.clean()
def test_cancel(self):
- """Test cancellation of the build."""
- # TODO
- """
- self.allocate_stock(50, 50, 200, self.output_1)
- self.build.cancel_build(None)
+ """Test build cancellation: status is updated and allocations are removed by default."""
+ self.build.issue_build()
- self.assertEqual(BuildItem.objects.count(), 0)
- """
+ self.allocate_stock(None, {self.stock_1_2: 50})
+ self.assertGreater(self.build.allocated_stock.count(), 0)
+
+ initial_output_count = self.build.build_outputs.filter(is_building=True).count()
+ self.assertGreater(initial_output_count, 0)
+
+ self.build.cancel_build(None)
+ self.build.refresh_from_db()
+
+ self.assertEqual(self.build.status, BuildStatus.CANCELLED)
+
+ # Allocations removed (but stock not consumed) by default
+ self.assertEqual(self.build.allocated_stock.count(), 0)
+ self.assertIsNone(StockItem.objects.get(pk=self.stock_1_2.pk).consumed_by)
+
+ # Incomplete outputs preserved by default (remove_incomplete_outputs=False)
+ self.assertEqual(
+ self.build.build_outputs.filter(is_building=True).count(),
+ initial_output_count,
+ )
def test_complete(self):
"""Test completion of a build output."""
@@ -932,7 +948,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 +968,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
@@ -1063,3 +1123,276 @@ class ExternalBuildTest(InvenTreeAPITestCase):
# Filter by 'not external'
response = self.get(url, {'external': 'false'})
self.assertEqual(len(response.data), 2)
+
+
+class BuildTaskTests(BuildTestBase):
+ """Direct unit tests for the background task functions in build/tasks.py.
+
+ These tests call task functions directly (synchronously) to verify the
+ business logic they encapsulate, independently of the API and offload mechanism.
+ """
+
+ def setUp(self):
+ """Create a stock location available to all task tests."""
+ super().setUp()
+ self.location = StockLocation.objects.create(name='Task Test Location')
+
+ def allocate_stock(self, output, allocations):
+ """Create BuildItem allocations against self.build for the given output."""
+ items_to_create = []
+ for item, quantity in allocations.items():
+ line = BuildLine.objects.filter(
+ build=self.build, bom_item__sub_part=item.part
+ ).first()
+ items_to_create.append(
+ BuildItem(
+ build_line=line,
+ stock_item=item,
+ quantity=quantity,
+ install_into=output,
+ )
+ )
+ BuildItem.objects.bulk_create(items_to_create)
+
+ def _setup_complete_build(self):
+ """Helper: allocate stock fully and complete all outputs so the build is ready to complete."""
+ self.stock_1_1.quantity = 1000
+ self.stock_1_1.save()
+ self.stock_2_1.quantity = 30
+ self.stock_2_1.save()
+
+ self.build.issue_build()
+
+ # Allocate untracked parts
+ self.allocate_stock(
+ None, {self.stock_1_1: 50, self.stock_1_2: 10, self.stock_2_1: 30}
+ )
+ # Allocate tracked parts to each output
+ self.allocate_stock(self.output_1, {self.stock_3_1: 6})
+ self.allocate_stock(self.output_2, {self.stock_3_1: 14})
+
+ self.build.complete_build_output(self.output_1, None)
+ self.build.complete_build_output(self.output_2, None)
+
+ # -----------------------------------------------------------------------
+ # cancel_build task
+ # -----------------------------------------------------------------------
+
+ def test_cancel_task_discards_allocations(self):
+ """cancel_build with remove_allocated_stock=False: allocations deleted, stock not consumed."""
+ self.build.issue_build()
+ self.allocate_stock(None, {self.stock_1_2: 50})
+ self.assertGreater(self.build.allocated_stock.count(), 0)
+
+ build.tasks.cancel_build(
+ self.build.pk, self.user.pk, remove_allocated_stock=False
+ )
+
+ # BuildItem rows gone
+ self.assertEqual(self.build.allocated_stock.count(), 0)
+ # Stock item was NOT consumed
+ self.assertIsNone(StockItem.objects.get(pk=self.stock_1_2.pk).consumed_by)
+
+ def test_cancel_task_consumes_allocations(self):
+ """cancel_build with remove_allocated_stock=True: stock items are marked consumed."""
+ self.build.issue_build()
+ self.allocate_stock(None, {self.stock_1_2: 50})
+
+ build.tasks.cancel_build(
+ self.build.pk, self.user.pk, remove_allocated_stock=True
+ )
+
+ # All BuildItem rows gone
+ self.assertEqual(self.build.allocated_stock.count(), 0)
+ # The allocated (non-trackable) stock was consumed
+ self.assertGreater(self.build.consumed_stock.count(), 0)
+
+ def test_cancel_task_removes_incomplete_outputs(self):
+ """cancel_build with remove_incomplete_outputs=True: in-progress outputs are deleted."""
+ self.build.issue_build()
+ initial_count = self.build.build_outputs.filter(is_building=True).count()
+ self.assertGreater(initial_count, 0)
+
+ build.tasks.cancel_build(
+ self.build.pk, self.user.pk, remove_incomplete_outputs=True
+ )
+
+ self.assertEqual(self.build.build_outputs.filter(is_building=True).count(), 0)
+
+ def test_cancel_task_preserves_incomplete_outputs(self):
+ """cancel_build with remove_incomplete_outputs=False: in-progress outputs are kept."""
+ self.build.issue_build()
+ initial_count = self.build.build_outputs.filter(is_building=True).count()
+ self.assertGreater(initial_count, 0)
+
+ build.tasks.cancel_build(
+ self.build.pk, self.user.pk, remove_incomplete_outputs=False
+ )
+
+ self.assertEqual(
+ self.build.build_outputs.filter(is_building=True).count(), initial_count
+ )
+
+ # -----------------------------------------------------------------------
+ # complete_build task
+ # -----------------------------------------------------------------------
+
+ @override_settings(
+ TESTING_TABLE_EVENTS=True,
+ PLUGIN_TESTING_EVENTS=True,
+ PLUGIN_TESTING_EVENTS_ASYNC=True,
+ )
+ def test_complete_build_task_triggers_event(self):
+ """complete_build task fires the BuildEvents.COMPLETED event."""
+ from django_q.models import OrmQ
+
+ from build.events import BuildEvents
+
+ set_global_setting('ENABLE_PLUGINS_EVENTS', True)
+ OrmQ.objects.all().delete()
+
+ self._setup_complete_build()
+ self.build.complete_build(self.user)
+
+ task = findOffloadedEvent(BuildEvents.COMPLETED, matching_kwargs=['id'])
+ self.assertIsNotNone(task)
+ self.assertEqual(task.kwargs()['id'], self.build.pk)
+
+ set_global_setting('ENABLE_PLUGINS_EVENTS', False)
+
+ def test_complete_build_task_trim_stock(self):
+ """complete_build with trim_allocated_stock=True removes over-allocations before consuming."""
+ self.stock_1_2.quantity = 100
+ self.stock_1_2.save()
+ self.stock_2_1.quantity = 30
+ self.stock_2_1.save()
+
+ self.build.issue_build()
+
+ # Over-allocate sub_part_1: need 50, allocate 100
+ self.allocate_stock(None, {self.stock_1_2: 100, self.stock_2_1: 30})
+ self.allocate_stock(self.output_1, {self.stock_3_1: 6})
+ self.allocate_stock(self.output_2, {self.stock_3_1: 14})
+
+ self.assertTrue(self.build.is_overallocated())
+
+ self.build.complete_build_output(self.output_1, None)
+ self.build.complete_build_output(self.output_2, None)
+ self.assertTrue(self.build.can_complete)
+
+ self.build.complete_build(self.user, trim_allocated_stock=True)
+ self.build.refresh_from_db()
+ self.assertEqual(self.build.status, BuildStatus.COMPLETE)
+
+ # Only 50 units of sub_part_1 should have been consumed (not 100)
+ consumed_qty = StockItem.objects.filter(
+ consumed_by=self.build, part=self.sub_part_1
+ ).aggregate(total=Sum('quantity'))['total']
+ self.assertEqual(consumed_qty, 50)
+
+ # -----------------------------------------------------------------------
+ # delete_build_outputs task
+ # -----------------------------------------------------------------------
+
+ def test_delete_build_outputs_skips_missing_id(self):
+ """delete_build_outputs silently skips nonexistent output IDs and deletes valid ones."""
+ from build.tasks import delete_build_outputs
+
+ # Create an output directly to avoid serial-number requirements on the trackable assembly
+ output = StockItem.objects.create(
+ part=self.assembly, quantity=3, is_building=True, build=self.build
+ )
+ real_id = output.pk
+
+ # Mix a valid ID with a nonexistent one — must not raise
+ delete_build_outputs(self.build.pk, [real_id, 99999])
+
+ self.assertFalse(StockItem.objects.filter(pk=real_id).exists())
+
+ # -----------------------------------------------------------------------
+ # scrap_build_outputs task
+ # -----------------------------------------------------------------------
+
+ def test_scrap_build_outputs_discard_allocations(self):
+ """scrap_build_outputs with discard_allocations=True removes allocations without consuming stock."""
+ from build.tasks import scrap_build_outputs
+
+ self.build.issue_build()
+ # Allocate tracked stock to output_1
+ self.allocate_stock(self.output_1, {self.stock_3_1: 6})
+ self.assertGreater(self.output_1.items_to_install.count(), 0)
+
+ scrap_build_outputs(
+ self.build.pk,
+ [{'output_id': self.output_1.pk, 'quantity': self.output_1.quantity}],
+ location_id=self.location.pk,
+ notes='discard test',
+ discard_allocations=True,
+ user_id=None,
+ )
+
+ self.output_1.refresh_from_db()
+ self.assertEqual(self.output_1.status, StockStatus.REJECTED.value)
+ self.assertFalse(self.output_1.is_building)
+
+ # Allocation rows should be gone
+ self.assertEqual(self.output_1.items_to_install.count(), 0)
+ # Stock was discarded (not consumed or installed)
+ self.stock_3_1.refresh_from_db()
+ self.assertIsNone(self.stock_3_1.consumed_by)
+ self.assertIsNone(self.stock_3_1.belongs_to)
+
+ def test_scrap_build_outputs_consume_allocations(self):
+ """scrap_build_outputs with discard_allocations=False (default) consumes/installs stock."""
+ from build.tasks import scrap_build_outputs
+
+ self.build.issue_build()
+ self.allocate_stock(self.output_1, {self.stock_3_1: 6})
+
+ scrap_build_outputs(
+ self.build.pk,
+ [{'output_id': self.output_1.pk, 'quantity': self.output_1.quantity}],
+ location_id=self.location.pk,
+ notes='consume test',
+ discard_allocations=False,
+ user_id=None,
+ )
+
+ self.output_1.refresh_from_db()
+ self.assertEqual(self.output_1.status, StockStatus.REJECTED.value)
+ self.assertFalse(self.output_1.is_building)
+
+ # complete_allocation splits stock_3_1 and installs the split piece into output_1
+ # (stock_3_1 quantity=1000, only 6 allocated, so a child item is created)
+ self.assertTrue(
+ StockItem.objects.filter(belongs_to=self.output_1).exists(),
+ 'Expected a tracked stock item to be installed into the output',
+ )
+
+ # -----------------------------------------------------------------------
+ # complete_build_outputs task
+ # -----------------------------------------------------------------------
+
+ def test_complete_build_outputs_with_status_none(self):
+ """complete_build_outputs with status=None falls back to StockStatus.OK in the model."""
+ from build.tasks import complete_build_outputs
+
+ self.build.issue_build()
+ # Create output directly to avoid serial-number requirements on the trackable assembly
+ output = StockItem.objects.create(
+ part=self.assembly, quantity=5, is_building=True, build=self.build
+ )
+
+ complete_build_outputs(
+ self.build.pk,
+ [{'output_id': output.pk}],
+ location_id=self.location.pk,
+ status=None,
+ notes='status none test',
+ user_id=None,
+ )
+
+ output.refresh_from_db()
+ self.assertFalse(output.is_building)
+ # status=None should resolve to StockStatus.OK (the model default)
+ self.assertEqual(output.status, StockStatus.OK.value)
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..c646aa843d 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'),
@@ -415,6 +402,12 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = {
'choices': barcode_plugins,
'default': 'inventreebarcode',
},
+ 'PART_ENABLE_LOCKING': {
+ 'name': _('Part Locking'),
+ 'description': _('Enable locking of parts to prevent modification'),
+ 'validator': bool,
+ 'default': True,
+ },
'PART_ENABLE_REVISION': {
'name': _('Part Revisions'),
'description': _('Enable revision field for Part'),
@@ -716,6 +709,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 +831,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 +917,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 +1229,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 23dee7e5bd..c9cae610ba 100644
--- a/src/backend/InvenTree/common/setting/user.py
+++ b/src/backend/InvenTree/common/setting/user.py
@@ -251,6 +251,12 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = {
'default': False,
'validator': bool,
},
+ 'SHOW_BOM_SUBASSEMBLY_LEVELS': {
+ 'name': _('Show Subassemblies in BOM table'),
+ 'description': _('Enable display of subassemblies in the BOM table'),
+ 'default': True,
+ 'validator': bool,
+ },
'NOTIFICATION_ERROR_REPORT': {
'name': _('Receive error reports'),
'description': _('Receive notifications for system errors'),
@@ -262,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/config_template.yaml b/src/backend/InvenTree/config_template.yaml
index ab5f232127..4b790e7c17 100644
--- a/src/backend/InvenTree/config_template.yaml
+++ b/src/backend/InvenTree/config_template.yaml
@@ -18,15 +18,15 @@
# TO MAINTAINERS: Do not change database strings
database:
# --- Available options: ---
- # ENGINE: Database engine. Selection from:
+ # engine: Database engine. Selection from:
# - mysql
# - postgresql
# - sqlite3
- # NAME: Database name
- # USER: Database username (if required)
- # PASSWORD: Database password (if required)
- # HOST: Database host address (if required)
- # PORT: Database host port (if required)
+ # name: Database name
+ # user: Database username (if required)
+ # password: Database password (if required)
+ # host: Database host address (if required)
+ # port: Database host port (if required)
# Base URL for the InvenTree server (or use the environment variable INVENTREE_SITE_URL)
# site_url: 'http://localhost:8000'
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/generic/states/transition.py b/src/backend/InvenTree/generic/states/transition.py
index ab9c48c47b..80ae2f7f3c 100644
--- a/src/backend/InvenTree/generic/states/transition.py
+++ b/src/backend/InvenTree/generic/states/transition.py
@@ -63,7 +63,7 @@ class TransitionMethod:
result: bool - True if the transition method was successful, False otherwise.
Raises:
- ValidationError: Alert the user that the transition failued
+ ValidationError: Alert the user that the transition failed
"""
raise NotImplementedError(
'TransitionMethod.transition must be implemented'
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 ef255e233d..ac72c900ff 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Arabic\n"
"Language: ar_SA\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "تعذّر تحويل {original} إلى {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "الكمية المقدمة غير صحيحة"
@@ -104,13 +105,13 @@ msgstr "أدخل التاريخ"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "ملاحظات"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po
index 56a1f558ca..1aea0f5a14 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Преобразуването на {original} в {unit} не беше успешно"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Въведена е недопустима стойност"
@@ -104,13 +105,13 @@ msgstr "Въведи дата"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Бележки"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Част"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Изпратено"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Изгубен"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Място в склада"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Места в склада"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po
index acf93c2bf0..195e4fb4b4 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Nelze převést {original} na {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Vyplněno neplatné množství"
@@ -104,13 +105,13 @@ msgstr "Zadejte datum"
msgid "Invalid decimal value"
msgstr "Neplaté desetinné číslo"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Poznámky"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Popis"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Popis (volitelně)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Měna"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Stav objednávky"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Nadřazená sestava"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Zahrnout varianty"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Zahrnout varianty"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Zahrnout varianty"
msgid "Part"
msgstr "Díl"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategorie"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Přiřazeno mě"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Min. datum"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Max datum"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Vyloučit strom"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Spotřební materiál"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Volitelné"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Sestava"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Sledováno"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testovatelné"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Objednávka nevyřízená"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Přiděleno"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Spotřebováno"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Na objednávku"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr "Sestava nenalezena"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Výrobní příkaz"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lokace"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Výstup"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Filtrovat podle ID výstupní položky zásoby. Použijte 'null' pro nalezení odinstalovaných položek sestavení."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Výrobní příkazy"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Kusovník sestavy ještě nebyl schválen"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Výrobní příkaz nesmí být vytvořen pro neaktivní díl"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Výrobní příkaz nemůže být vytvořen pro odemčený díl"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Výrobní příkaz může být externě splněn pouze pro nakupovatelné díly"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Musí být specifikován odpovědný uživatel nebo skupina"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Díl výrobního příkazu nelze změnit"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Cílové datum musí být po datu zahájení"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referenční číslo výrobního příkazu"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Reference"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Stručný popis sestavení (nepovinné)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Výrobní příkaz, kterému je tato stavba přiřazena"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Vyber téma, které chceš stavět"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referenční číslo prodejní objednávky"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Prodejní objednávka, které je tato stavba přiřazena"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Zdrojové umístění"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Vyberte lokaci, ze které chcete brát zásoby pro sestavu (nechte prázdné, chcete-li brát zásoby z libovolné lokace)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Externí sestavení"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Tento výrobní příkaz je plněn externě"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Cílová lokace"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Vyberte lokaci, kde budou dokončené položky uloženy"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Množství sestav"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Počet skladových položek k sestavení"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Dokončené položky"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Počet skladových položek, které byly dokončeny"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Stav sestavení"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Stavový kód sestavení"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Kód dávky"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Datum vytvoření"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Datum zahájení sestavení"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Plánované datum zahájení této objednávky"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Cílové datum dokončení"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Datum dokončení"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "dokončil"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Vystavil"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Uživatel, který vystavil tento výrobní příkaz"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Odpovědný"
-#: build/models.py:412
+#: build/models.py:419
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:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Externí odkaz"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Odkaz na externí URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Priorita sestavení"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Priorita tohoto výrobního příkazu"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Kód projektu"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Kód projektu pro tento výrobní příkaz"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Nelze dokončit výrobní příkaz s otevřenými podobjednávkami"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Nelze dokončit výrobní příkaz s neúplnými výstupy"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Výrobní příkaz {build} byl dokončen"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Výrobní příkaz byl dokončen"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nebyl specifikováno žádný výstup sestavení"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Výstup sestavení je již dokončen"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Výstup neodpovídá výrobnímu příkazu"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Množství musí být vyšší než nula"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
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:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Přiřazené skladové položky jsou stále ve výrobě"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Řádková položka výrobního příkazu"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Vytvořit objekt"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Vytvořit objekt"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Množství"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Vyžadované množství pro výrobní příkaz"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Množství spotřebovaných zásob"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Vybraná skladová položka neodpovídá řádku kusovníku"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "Přiřazené množství musí být vyšší než nula"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Množství musí být 1 pro zřetězený sklad"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Skladová položka je nadměrně zabrána"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Skladové položky"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Zdrojová skladová položka"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Skladové množství pro sestavení"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalovat do"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Cílová skladová položka"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Úroveň sestavení"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Název dílu"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Vytvořit výstup"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Výstupní díl se neshoduje s dílem výrobního příkazu"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Výstup sestavení je již dokončen"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Tento stavební výstup není plně přiřazen"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Zadejte množství pro výstup sestavení"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Celé množství požadované pro sledovatelné díly"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Sériová čísla"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Zadejte sériová čísla pro sestavení výstupů"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Skladové umístění pro výstup sestavy"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automaticky zvolit sériová čísla"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Následující sériová čísla již existují nebo jsou neplatná"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Musí být uveden seznam výstupů sestavy"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Skladové umístění pro sešrotované výstupy"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Zahodit alokace"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Důvod vyřazení výstupu(ů) sestavy"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Umístění dokončených výstupů sestavy"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Přijmout neúplné přidělení"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Spotřebovat přidělené zásoby"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Spotřebovat všechny zásoby, které již byly přiděleny této sestavě"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Odstranit neúplné výstupy"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Není povoleno"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Přijmout jako spotřebované tímto výrobním příkazem"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Uvolnit před dokončením tohoto výrobního příkazu"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Nadměrně přidělené zásoby"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k tomuto výrobnímu příkazu"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Některé skladové položky byly nadměrně přiděleny"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Přijmout nepřidělené"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výrobnímu příkazu"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Požadované zásoby nebyly plně přiděleny"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Přijmout neúplné"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Přijmout, že nebyl dokončen požadovaný počet výstupů sestavy"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Požadované množství sestavy nebylo dokončeno"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Výrobní příkaz má otevřené podpříkazy"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Výrobní příkaz musí být ve stavu produkce"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Výrobní příkaz má neúplné výstupy"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linka sestavy"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Výstup sestavy"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Výstup sestavy musí odkazovat na stejnou sestavu"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Řádková položka sestavy"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Položka musí být skladem"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Dostupné množství ({q}) překročeno"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Položky přidělení musí být poskytnuty"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Vynechat lokace"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Vyloučit skladové položky z tohoto vybraného umístění"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Zaměnitelné zásoby"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Skladové položky na více místech lze používat zaměnitelně"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Náhradní zásoby"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Povolit přidělování náhradních dílů"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Volitelné položky"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Přiřazení volitelných položek kusovníku k objednávce sestavy"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "Všechny položky"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "Nesledované položky"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "Sledované položky"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "Typ položky"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "Vyberte typ položky pro automatické přiřazení"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Reference v kusovníku"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID dílu kusovníku"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Název dílu kusovníku"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "Informace instalace"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Sestavení"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Díl dodavatele"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Přidělené množství"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Reference sestavení"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Název kategorie dílů"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Sledovatelné"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Zděděno"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Povolit varianty"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Položka kusovníku"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Ve výrobě"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Naplánováno na sestavení"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Externí zásoby"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Dostupné zásoby"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Dostupné náhradní zásoby"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Dostupná varianta skladu"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Spotřebované množství přesahuje přidělené množství"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Nepovinné poznámky ke spotřebě zásob"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Sestavení položky musí odkazovat na správný výrobní příkaz"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Duplikovat přidělení položky sestavení"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Výrobní linka musí odkazovat na správný výrobní příkaz"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Duplikovat přiřazení výrobní linky"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Nevyřízeno"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Výroba"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Pozastaveno"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Zrušeno"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Hotovo"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Výrobní příkaz {build} byl dokončen"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Výrobní příkaz byl dokončen"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Zásoby potřebné pro výrobní příkaz"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Výrobní příkaz {build} vyžaduje další zásoby"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Opožděný výrobní příkaz"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Objednávka sestavy {bo} je nyní opožděná"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Je odkaz"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Je soubor"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
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,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Aktualizováno"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Časové razítko poslední aktualizace"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Aktualizoval/a"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Uživatel, který naposledy aktualizoval tento objekt"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Jedinečný kód projektu"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Popis projektu"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Tlačítko nastavení"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Hodnota nastavení"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Zvolená hodnota není platnou možností"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Hodnota musí být logická hodnota"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Hodnota musí být celé číslo"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Hodnota musí být platné číslo"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Hodnota neprošla kontrolou platnosti"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Cena"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Koncový bod"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Je tento webhook aktivní"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token pro přístup"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Tajný klíč"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Sdílený tajný klíč pro HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID zprávy"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Unikátní identifikátor pro tuto zprávu"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Hostitel"
-#: common/models.py:1587
+#: common/models.py:1593
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:1601
msgid "Header"
msgstr "Záhlaví"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Záhlaví této zprávy"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Tělo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Tělo zprávy"
-#: common/models.py:1614
+#: common/models.py:1620
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:1625
msgid "Worked on"
msgstr "Pracoval na"
-#: common/models.py:1620
+#: common/models.py:1626
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:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Název"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Odkaz"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Zveřejněno"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Souhrn"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Přečteno"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Byla tato novinka přečtena?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Soubor obrázku"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Cílový typ modelu pro tento obrázek"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "Cílové ID modelu pro tento obrázek"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Vlastní jednotka"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Symbol jednotky musí být unikátní"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Název jednotky"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Volitelný symbol jednotky"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definice"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definice jednotky"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Příloha"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Chybějící soubor"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Chybějící externí odkaz"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Typ modelu"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Cílový typ modelu pro obrázek"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Vyberte soubor k přiložení"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentář"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Komentář přílohy"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Datum nahrání"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Datum, kdy byl soubor nahrán"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Velikost souboru"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Velikost souboru v bytech"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Uveden neplatný typ modelu pro přílohu"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Vlastní stav"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Vlastní stavy"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Nastavení referenčního stavu"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Logický klíč"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Hodnota"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Popisek"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Barva"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Barva, která bude zobrazena ve frontendu"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
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:2345
msgid "Model must be selected"
msgstr "Musí být vybrán model"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Musí být vybrán klíč"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Musí být vybrán logický klíč"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
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:2368
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:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Výběrové pole"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Výběrová pole"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Název výběrového pole"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Popis výběrového pole"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Uzamčeno"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Je tento seznam výběrů uzamčen?"
-#: common/models.py:2272
+#: common/models.py:2448
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:2456
msgid "Source Plugin"
msgstr "Zdrojový plugin"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Plugin, který poskytuje seznam výběru"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Zdrojový řetězec"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Výchozí položka"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Vytvořeno"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Poslední aktualizace"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Položka seznamu výběrů"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Položky seznamu výběrů"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
msgid "Value of the selection list entry"
msgstr "Název výběrového seznamu"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Popisek pro výběr seznamu"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Popis vstupu výběrového seznamu"
-#: common/models.py:2407
+#: common/models.py:2583
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:2617
msgid "Parameter Template"
msgstr "Šablona parametru"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Šablona parametru"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Parametry zaškrtávacího pole nemohou mít jednotky"
-#: common/models.py:2484
+#: common/models.py:2660
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:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Volby musí být jedinečné"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Název šablony parametru musí být jedinečný"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "Cílový typ modelu pro šablonu tohoto parametru"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Název parametru"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Jednotky"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Fyzické jednotky pro tento parametr"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Popis parametru"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Zaškrtávací políčko"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Je tento parametr zaškrtávací políčko?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Volby"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Platné volby pro tento parametr (oddělené čárkami)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Seznam výběru pro tento parametr"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Povoleno"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Je šablona tohoto parametru povolena?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Parametr"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Parametry"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Neplatná volba pro hodnotu parametru"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Neplatný typ modelu pro daný parametr"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "ID modelu"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Šablona parametru"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Data"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Poznámka"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Volitelné pole pro poznámku"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Sken čárového kódu"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Data čárového kódu"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Časová značka"
-#: common/models.py:2864
+#: common/models.py:3040
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:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontext"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Kontextová data pro skenov čárového kódu"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Odpověď"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Výsledek"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Bylo skenování čárového kódu úspěšné?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Vyskytla se chyba"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "E-mailová zpráva"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "E-mailové zprávy"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Oznámeno"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Odesláno"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Selhalo"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Doručeno"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Potvrzeno"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Příchozí"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Odchozí"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Bez odpovědi"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Sledovat doručení"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Sledovat přečtení"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Sledovat kliknutí"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Globální ID"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "ID vlákna"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Vlákno"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Vlákno propojeno k této zprávě"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Priorita"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Emailové vlákno"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Emailové vlákna"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Unikátní identifikátor pro toto vlákno"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Začato interně"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Bylo toto vlákno započato interně?"
-#: common/models.py:3200
+#: common/models.py:3376
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:3381
msgid "Date and time that the thread was last updated"
msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Přijaté položky"
@@ -2451,25 +2491,25 @@ msgstr "Argumenty klíčových slov"
msgid "Task keyword arguments"
msgstr "Argumenty klíčových slov úlohy"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Typ modelu"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Tento výběr je uzamčen"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dny"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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í"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Interval kontroly aktualizací"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatické Zálohování"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Interval automatického zálohování"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Interval mazání úloh"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Interval odstranění protokolu chyb"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Interval pro odstranění oznámení"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "Interval mazání emailů"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Chránit Email log"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "Zabránit odstranění vstupů email logů"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Podpora čárových kódů"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Ukládat výsledky čárových kódů"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
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:376
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:381
msgid "Barcode Input Delay"
msgstr "Zpoždění vstupu čárového kódu"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Podpora webové kamery pro čárové kódy"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Zobrazovat data čárových kódů"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Plugin pro generování čárových kódů"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revize dílu"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Povolit pole revize pro díl"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Revize pouze pro sestavy"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Povolit revize pouze pro sestavy"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Povolit odstranění ze sestavy"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "IPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Povolit duplicitní IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Povolit editaci IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Kopírovat data BOM dílu"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Kopírovat data parametrů dílu"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Kopírovat zkušební data dílu"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kopírovat šablony parametrů kategorie"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
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:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponent"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Možné zakoupit"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Prodejné"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Nehmotné (virtuální)"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
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:512
msgid "Show related parts"
msgstr "Zobrazit související díly"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Počáteční údaje zásob"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Počáteční údaje dodavatele"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formát zobrazení jména dílu"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Výchozí ikona kategorie dílu"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
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:547
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:558
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:560
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:571
msgid "Use Supplier Pricing"
msgstr "Použít ceny dodavatele"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Přepsání historie nákupu"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Použít ceny skladových položek"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Stáří cen skladových položek"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Použít cenu varianty"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Pouze aktivní varianty"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Automatická aktualizace cen"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Interval přestavby cen"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Interní ceny"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Povolit interní ceny pro díly"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Přepis interní ceny"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr "Povolit nulovou hodnotu kusovníku"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Povolit tisk štítků"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI rozlišení štítků"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Povolit reporty"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Povolit generování reportů"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Režim ladění chyb"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Zaznamenávat chyby reportů"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Vynutit jednotky parametru"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globálně unikátní sériová čísla"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Odstranit vyčerpané zásoby"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr "Odstranit serializované zásoby"
+
#: common/setting/system.py:720
+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:725
msgid "Batch Code Template"
msgstr "Šablona kódu dávky"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Expirace zásob"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Povolit funkci expirace zásob"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Prodat prošlé zásoby"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Povolit prodej prošlých zásob"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Čas stáří zásob"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Sestavit prošlé zásoby"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
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:757
msgid "Stock Ownership Control"
msgstr "Kontrola vlastnictví zásob"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Výchozí ikona umístění zásob"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Zobrazit nainstalované skladové položky"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Zkontrolovat BOM při instalaci položek"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Povolit převod mimo sklad"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Referenční vzor objednávky sestavy"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Vyžadovat aktivní díl"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Vyžadovat uzamčený díl"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Vyžadovat schválený kusovník"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Vyžadovat uzavření podobjednávek"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Externí výrobní příkazy"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Povolit funkcionalitu externích výrobních příkazů"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr "Vyžadovat externí výrobní příkazy"
+
+#: common/setting/system.py:837
+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:843
msgid "Block Until Tests Pass"
msgstr "Blokovat, dokud testy neprojdou"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Zabránit dokončení výstupů sestavy, dokud neprojdou všechny požadované testy"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Povolit vracení objednávek"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Referenční vzor návratové objednávky"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Úprava dokončených návratových objednávek"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Umožnit úpravu návratových objednávek po jejich dokončení"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Referenční vzor prodejní objednávky"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Výchozí přeprava prodejní objednávky"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Úprava dokončených prodejních objednávek"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Zásilka vyžaduje kontrolu"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Zabránit dokončení zásilek dokud nebudou zkontrolovány položky"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Označit odeslané objednávky jako dokončené"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr "Blokovat nekompletné testy položky"
+
+#: common/setting/system.py:943
+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:949
msgid "Purchase Order Reference Pattern"
msgstr "Referenční vzor nákupní objednávky"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Úprava dokončených nákupních objednávek"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Převést měnu"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Automatické dokončování nákupních objednávek"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Povolit pole zapomenutého hesla"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Povolit registrace"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Povolit SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "Povolit SSO registraci"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Povolit synchronizaci SSO skupin"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "klíč SSO skupiny"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "mapa SSO skupiny"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Odstranit skupiny mimo SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Vyžadován e-mail"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Automaticky vyplnit SSO uživatele"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Mail dvakrát"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Heslo dvakrát"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Povolené domény"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Skupina při registraci"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Vynutit MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Zkontrolovat pluginy při spuštění"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Zkontrolovat aktualizace pluginů"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Povolit integraci URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Povolit integraci navigace"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Povolit integrování pluginů do navigace"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Povolit integraci aplikací"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Povolit pluginům přidávát aplikace"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Povolit integraci plánu"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Povolit integraci událostí"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Povolit rozhraní intergace"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Povolit integraci emailu"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Povolit projektové kódy"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr "Povolit inventuru"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Vyloučit externí umístění"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
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:1180
msgid "Automatic Stocktake Period"
msgstr "Perioda automatické inventury"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
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:1187
msgid "Delete Old Stocktake Entries"
msgstr "Odstranit staré záznamy inventur"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
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:1195
msgid "Stocktake Deletion Interval"
msgstr "Interval odstranění inventury"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
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:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "Odstranit staré záznamy sledování zásob"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
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:1212
msgid "Stock Tracking Deletion Interval"
msgstr "Interval odstranění sledování zásob"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
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:1221
msgid "Display Users full names"
msgstr "Zobrazit celá jména uživatelů"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Zobrazit uživatelské profily"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr "Týden začíná"
+
+#: common/setting/system.py:1234
+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:1237
+msgid "Sunday"
+msgstr "Neděle"
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr "Pondělí"
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr "Úterý"
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr "Středa"
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr "Čtvrtek"
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr "Pátek"
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr "Sobota"
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Povolit data zkušební stanice"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr "Povolit ping stroje"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "Povolit pravidelný úkol pingu registrovaných strojů pro kontrolu jejich stavu"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Vypnuto: Celá kategorie se ukáže jako nápověda. Zapnuto: Celá kategorie se ukáže jako prostý text."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr "Zobrazit podsestavy v tabulce kusovníku"
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr "Povolit zobrazení podsestav v tabulce kusovníku"
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Přijímat zprávy o chybách"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Dostávat oznámení o systémových chybách"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Poslední použité tiskárny"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Uložte poslední použité tiskárny pro uživatele"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Všechny modely"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Není zadán typ modelu přílohy"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Neplatný typ přílohy modelu"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Minimální počet míst nesmí být větší než maximální počet míst"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Maximální počet míst nesmí být menší než minimální počet míst"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Prázdná doména není povolena."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Neplatný název domény: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Hodnota musí být napsána velkými písmeny"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Hodnota musí být platný variabilní identifikátor"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Výrobce"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Společnost"
@@ -4050,8 +4193,8 @@ msgstr "Kontaktní telefonní číslo"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adresa"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Základní díl"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Číslo dílu výrobce"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Dodavatel"
@@ -4254,7 +4397,7 @@ msgstr "Dodavatel"
msgid "Select supplier"
msgstr "Vyberte dodavatele"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Skladová evidence dodavatele"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "základní cena"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Balení"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "více"
@@ -4331,23 +4474,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:881 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"
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Platné"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Neznámý"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ 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:132
msgid "Order Reference"
msgstr "Označení objednávky"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Vynikající"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Má projektový kód"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Vytvořil(a)"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Vytvořeno před"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Vytvořeno po"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Má počáteční datum"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Datum začátku před"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Datum začátku po"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Má cílové datum"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Cílové datum před"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Cílové datum po"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "Aktualizováno před"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "Aktualizováno po"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Má cenu"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Dokončeno před"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Dokončeno po"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Objednávka"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Objednávka byla dokončena"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Interní díl"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Objednávka čeká na vyřízení"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Dokončeno"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Má zásilku"
-#: order/api.py:1442
+#: order/api.py:1446
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:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Vratka"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Celková cena"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Celková cena za tuto objednávku"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Měna objednávky"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Tato objednávka je uzamčena a nelze ji upravit"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Kontakt nesouhlasí s vybranou společností"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Datum zahájení musí být před cílovým datem"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "Adresa nesouhlasí s vybranou společností"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Popis objednávky (volitelné)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Odkaz na externí stránku"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Datum zahájení"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Cílené datum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Očekávané datum doručení objednávky. Objednávka bude po tomto datu splatná."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Datum vystavení"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Datum vystavení objednávky"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "Aktualizováno v"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Uživatel nebo skupina odpovědná za tuto objednávku"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Kontaktní bod pro tuto objednávku"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Stav"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Stav objednávky"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Společnost, od které se položky objednávají"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Reference dodavatele"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Referenční kód objednávky dodavatele"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "přijal"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Datum dokončení objednávky"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Místo určení"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Cílové místo pro přijaté položky"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Řádková položka neodpovídá nákupní objednávce"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Řádkové položce chybí propojený díl"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Množství musí být kladné"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr "Stav prodejní objednávky"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Reference zákazníka "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Datum odeslání"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "odesláno společností"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Objednávka je již dokončena"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Objednávka je již zrušena"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Množství položky"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr "Číslo linky"
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr "Číslo řádku pro tuto položku (nepovinné)"
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Označení řádkové položky"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Poznámky k řádkovým položkám"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Popis řádkové položky (nepovinné)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Dodatečný kontext pro tento řádek"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Cena za jednotku"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Řádková položka nákupní objednávky"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Dodavatelský díl musí odpovídat dodavateli"
-#: order/models.py:1944
+#: order/models.py:2003
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:2010
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:2016
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:2026
+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:2062
msgid "Supplier part"
msgstr "Díl dodavatele"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Doručeno"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Nákupní cena"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Jednotková nákupní cena"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Nákupní příkaz extra linka"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Řádková položka prodejní objednávky"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Prodejní cena"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Jednotková prodejní cena"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Odesláno"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Odeslané množství"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Zásilka prodejní objednávky"
-#: order/models.py:2305
+#: order/models.py:2375
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:2411
msgid "Shipping address for this shipment"
msgstr "Dodací adresa pro tuto zásilku"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Datum odeslání"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Datum doručení"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Datum doručení zásilky"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Kontroloval(a)"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Doprava"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Číslo zásilky"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Sledovací číslo"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informace o sledování zásilky"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Číslo faktury"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Referenční číslo přiřazené faktury"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Zásilka již byla odeslána"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
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:2586
msgid "Sales Order Extra Line"
msgstr "Prodejní příkaz extra linka"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Přidělení prodejní objednávky"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Skladová položka nebyla přiřazena"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Řádek"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Položka"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Vyberte skladovou položku pro přidělení"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Zadejte množství pro přidělení zásob"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Reference návratové objednávky"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Společnost, od které se vrací položky"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Stav návratové objednávky"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Linkový předmět vratky"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Zásobní položka musí být specifikována"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Množství vratky přesahuje množstvní zásob"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Neplatné množství pro sériovou skladovou položku"
-#: order/models.py:3065
+#: order/models.py:3135
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:3150
msgid "Received Date"
msgstr "Datum přijetí"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "Datum příjetí této vratky"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Výsledek"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Výsledky pro tuto položku"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Vratka extra linka"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID objednávky"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID objednávky k duplikaci"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Kopírovat řádky"
-#: order/serializers.py:82
+#: order/serializers.py:84
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:90
msgid "Copy Extra Lines"
msgstr "Kopírovat extra řádky"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopírovat parametry"
-#: order/serializers.py:96
+#: order/serializers.py:98
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:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Řádkové položky"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Dokončené řádky"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplikovat objednávku"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Specifikujte možnosti pro duplikaci této objednávky"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Neplatné ID objednávky"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Název dodavatele"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Objednávku nelze zrušit"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Objednávka má nedokončené řádkové položky"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Objednávka není otevřena"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automatická cena"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Měna nákupní ceny"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Sloučit položky"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Číslo zboží (SKU)"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Interní číslo dílu"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Interní název dílu"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Musí být uveden díl dodavatele"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Objednávka musí být zadána"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Dodavatel musí odpovídat objednávce"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "Objednávka musí odpovídat dodavateli"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Řádková položka"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Datum expirace"
-#: order/serializers.py:870
+#: order/serializers.py:872
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:880
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:890
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:898 order/serializers.py:2166
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:905
msgid "Barcode"
msgstr "Čárový kód"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Naskenovaný čárový kód"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Musí být uvedeny řádkové položky"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Místo určení musí být specifikováno"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr "Zásilky"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Dokončené zásilky"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "Přidělené řádky"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Měna prodejní ceny"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Přidělené položky"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Nebyly poskytnuty žádné údaje o zásilce"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Množství musí být kladné"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr "Skladová položka neprošla všemi požadovanými testy"
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Zásilka již byla odeslána"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Zásilka není spojena s touto objednávkou"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Následující sériová čísla nejsou k dispozici"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Řádkový předmět vratky"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Řádková položka neodpovídá vratce"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Řádková položka již byla přijata"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Množství k vrácení"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Měna ceny řádku"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Ztraceno"
@@ -5661,6 +5879,11 @@ msgstr "Vrácení peněz"
msgid "Reject"
msgstr "Odmítnout"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Vydáno"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Objednávka po splatnosti"
@@ -5696,7 +5919,7 @@ msgstr "Označené"
msgid "Filter by starred categories"
msgstr "Filtrovat podle kategorií s hvězdičkou"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Hloubka"
@@ -5704,7 +5927,7 @@ msgstr "Hloubka"
msgid "Filter by category depth"
msgstr "Filtrovat podle hloubky kategorie"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Nejvyšší úroveň"
@@ -5712,7 +5935,7 @@ msgstr "Nejvyšší úroveň"
msgid "Filter by top-level categories"
msgstr "Filtrovat podle nejvyšších kategorií"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Kaskáda"
@@ -5732,75 +5955,79 @@ msgstr "Filtrovat podle nadřazené kategorie"
msgid "Exclude sub-categories under the specified category"
msgstr "Vyloučit podkategorie v zadané kategorii"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Má výsledky"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Je varianta"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Je revizí"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Má revize"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Kusovník schválen"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Kaskádové kategorie"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "Sestavený díl je aktivní"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "Sestavený díl je sledovatelný"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Sestavený díl je testovatelný"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr "Sestavený díl je uzamčen"
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "Kompotenta je aktivní"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "Komponenta je sledovatelná"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Díl komponenty je testovatelný"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "Komponenta je část sestavy"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "Komponenta je virtuální"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "Má dostupné zásoby"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Využití"
@@ -5809,11 +6036,11 @@ msgstr "Využití"
msgid "Part Category"
msgstr "Kategorie dílu"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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í"
@@ -5821,7 +6048,7 @@ msgstr "Výchozí umístění"
msgid "Default location for parts in this category"
msgstr "Výchozí umístění dílů v této kategorii"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Strukturální"
@@ -5837,12 +6064,12 @@ msgstr "Výchozí klíčová slova"
msgid "Default keywords for parts in this category"
msgstr "Výchozí klíčová slova pro díly v této kategorii"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikona"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikona (volitelná)"
@@ -5862,984 +6089,1028 @@ msgstr "Výchozí hodnota"
msgid "Default Parameter Value"
msgstr "Výchozí hodnota parametru"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Prodat více"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Měna použitá pro výpočet cen v mezipaměti"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimální cena kusovníku"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minimální cena komponent dílu"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maximální cena kusovníku"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maximální cena komponent dílu"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimální nákupní cena"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimální historická nákupní cena"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maximální nákupní cena"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maximální historická nákupní cena"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimální interní cena"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimální cena závislá na množstevní slevě"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maximální interní cena"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maximální cena závislá na množstevní slevě"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimální cena dodavatele"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Minimální cena dílu od externích dodavatelů"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maximální cena dodavatele"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maximální cena dílu od externích dodavatelů"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimální cena variant"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Vypočítané minimální náklady na varianty dílů"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maximální cena variant"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Vypočítané maximální náklady na varianty dílů"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimální cena"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Přepsat minimální náklady"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maximální cena"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Přepsat maximální náklady"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Vypočítané minimální celkové náklady"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Vypočítané maximální celkové náklady"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimální prodejní cena"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Minimální prodejní cena na základě cenových zvýhodnění"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maximální prodejní cena"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maximální prodejní cena na základě cenových zvýhodnění"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimální prodejní cena"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimální historická prodejní cena"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maximální prodejní cena"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maximální historická prodejní cena"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Díl na inventuru"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Počet položek"
-#: part/models.py:3468
+#: part/models.py:3532
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:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Celkové dostupné zásoby v době inventury"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Datum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Datum provedení inventury"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimální cena zásob"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Odhadovaná minimální cena zásob k dispozici"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maximální cena zásob"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Odhadovaná maximální cena zásob k dispozici"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Částeční sleva v ceně"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Šablona testu položky"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části"
-#: part/models.py:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Název testu"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Zadejte název testu"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Testovací klíč"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Zjednodušený klíč pro testování"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Popis testu"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Zadejte popis pro tento test"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Je tento test povolen?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Požadováno"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Je tato zkouška vyžadována k projití?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Požadovaná hodnota"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Vyžaduje přílohu"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Platné volby pro tento test (oddělené čárkami)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr "Neplatné množství - nebyly zadány žádné jedotky pro tento díl"
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr "Množství musí být větší nebo rovno nule"
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "Položku kusovníku nelze změnit - sestava je uzamčena"
-#: part/models.py:3956
+#: part/models.py:4080
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:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Vyberte nadřazený díl"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Poddílec"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Vyberte díl které bude použit v kusovníku"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr "Množství"
+
+#: part/models.py:4108
+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:4120
msgid "BOM quantity for this BOM item"
msgstr "Kusovníkové množství pro tuto kusovníkovou položku"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Tato položka kusovníku je nepovinná"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Nastavit množství"
-#: part/models.py:4009
+#: part/models.py:4141
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:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Přirozené ztráty"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Zaokrouhlení více"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Reference položky kusovníku"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Poznámky k položce kusovníku"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Kontrolní součet"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Kontrolní součet řádku kusovníku"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Schváleno"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Tato položka kusovníku ještě nebyla schválena"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Se zdědí"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Množství musí být celé číslo pro sledovatelné díly"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Poddíl musí být specifikován"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Náhradní položka kusovníku"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Nadřazená položka kusovníku"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Náhradní díl"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Díl 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Díl 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Vyberte související díl"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Poznámka pro tento vztah"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Duplicitní vztah již existuje"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Nadřazená kategorie"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Nadřazená kategorie dílu"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Podkategorie"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Výsledky"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Nákupní měna této skladové položky"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Soubor není obrázek"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Původní díl"
-#: part/serializers.py:397
+#: part/serializers.py:416
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:421
msgid "Copy Image"
msgstr "Kopírovat obrázek"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Kopírovat obrázek z původního dílu"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Kopírovat kusovník"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
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:442
msgid "Copy Notes"
msgstr "Kopírovat poznámky"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Kopírovat poznámky z původního dílu"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Kopírovat testy"
-#: part/serializers.py:431
+#: part/serializers.py:450
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:468
msgid "Initial Stock Quantity"
msgstr "Počáteční skladové množství"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Počáteční skladové místo"
-#: part/serializers.py:459
+#: part/serializers.py:478
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:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Číslo dílu výrobce"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Vybraná společnost není platný dodavatel"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Vybraná společnost není platný výrobce"
-#: part/serializers.py:529
+#: part/serializers.py:548
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:555
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:840
msgid "Category Name"
msgstr "Název kategorie"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Budova"
-#: part/serializers.py:846
+#: part/serializers.py:870
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:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Skladové položky"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revize"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Nezařazené zásoby"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Skladové varianty"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Duplikovat díl"
-#: part/serializers.py:969
+#: part/serializers.py:997
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:1003
msgid "Initial Stock"
msgstr "Počáteční zásoby"
-#: part/serializers.py:976
+#: part/serializers.py:1004
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:1010
msgid "Supplier Information"
msgstr "Informace o dodavateli"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Kopírovat parametry kategorie"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Stávající obrázek"
-#: part/serializers.py:999
+#: part/serializers.py:1027
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:1044
msgid "Image file does not exist"
msgstr "Obrázek neexistuje"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Schválit celý kusovník"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Lze postavit"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Vyžadováno pro výrobní objednávku"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Přířazeno výrobním objednávkám"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Vyžadováno pro prodejní objednávky"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Přiřazeno prodejním objednávkám"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "IPN dílu"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "Popis dílu"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
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:1364
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:1374
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:1381
msgid "Generate Stocktake Entries"
msgstr "Generovat vstupy inventury"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr "Uložit vstupy inventury pro vybrané díly"
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "Generovat report"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr "Generovat report inventury pro vybrané díly"
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minimální cena"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Přespat vypočítanou hodnotu pro minimální cenu"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Měna minimální ceny"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maximální cena"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Přespat vypočítanou hodnotu pro maximální cenu"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Měna maximální ceny"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Aktualizovat"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Aktualizovat cenu pro díl"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+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:1733
msgid "Select the parent assembly"
msgstr "Vybrat nadřazenou sestavu"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Vyberte komponentu dílu"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr "Neplatný formát množství"
+
+#: part/serializers.py:2017
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:2025
msgid "Remove Existing Data"
msgstr "Odstranit existující data"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
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:2031
msgid "Include Inherited"
msgstr "Zahrnout zděděné"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Přeskočit neplatné řádky"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Kopírovat náhradní díly"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Balíčkový plugin"
msgid "Plugin"
msgstr "Plugin"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nebyl nalezen žádný autor"
@@ -8021,7 +8292,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é"
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Potřebné materiály"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Obrázek dílu"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Vydáno"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Vyžadováno pro"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Sériové číslo"
@@ -8292,7 +8560,7 @@ msgstr "Report o testu skladové položky"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Instalované položky"
@@ -8325,6 +8593,10 @@ msgstr "Žádný výsledek (povinný)"
msgid "No result"
msgstr "Žádný výsledek"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr "Neplatná cesta k media souboru"
@@ -8353,491 +8625,499 @@ msgstr "part_image tag vyžaduje instanci dílu"
msgid "company_image tag requires a Company instance"
msgstr "company_image tag vyžaduje intanci společnosti"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filtrovat dle hloubky lokace"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Filtrovat dle nejvyšší lokace"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Zahrnout pod-lokace ve filtrovaných výsledcích"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Nadřazená místo"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtrovat podle nadřazené lokace"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Název dílu (citlivost písmen na malá a velká písmena)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Název dílu obsahuje (citlivost písmen na malá a velká písmena)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Název dílu (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "IPN dílu (citlivost písmen na malá a velká písmena)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "IPN dílu obsahuje (citlivost písmen na malá a velká písmena)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "IPN dílu (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Minimální zásoby"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Maximální zásoby"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Kód stavu"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Externí umístění"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Spotřebováno výrobním příkazem"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Nainstalováno v jiné skladové položce"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Strom dílů"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Aktualizováno před"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Aktualizováno po"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Inventura před"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Inventura po"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Datum expirace ped"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Datum expirace po"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Zastaralé"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Zadejte PK skladové položky, abyste vyloučili danou položku a všechny její potomky"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Umístění kaskády"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Pokud je pravda, uveďte předměty v podružených místech dané lokace"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Filtrovat podle numberické ID lokace nebo doslovného 'null'"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Množství je povinné"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Platný díl musí být dodán"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Daný dodavatelský díl neexistuje"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Dodavatelský díl na nastavenou velikost balení, ale znak use_pack_size není nastaven"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Sériové čísla nemohou být zadána pro díl bez sledovanosti"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Zahrnout nainstalované"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Pokud je pravda, zahrne výslekdy testů pro předměty nainstalované pod danou skladovou položku"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Filtrovat podle číselného ID položky skladu"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "Skladová položka s ID {id} neexistuje"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "Zahrnout varianty"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "Datum po"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "Datum před"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Typ skladového umístění"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Typy skladových umístění"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Skladové umístění"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Skladová umístění"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Správce"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Vybrat vlastníka"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Externí"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Toto je externí skladové umístění"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Typ umístění"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Typ tohoto skladového umístění"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr "Serializované zásoby nelze odstranit"
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} neexistuje"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Díl musí být zadán"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Položka nemůže patřit sama sobě"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Nadřazená skladová položka"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Základní díl"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Instalováno v"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
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:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Kód šarže pro tuto skladovou položku"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Mnižství"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Zdrojová sestavení"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Postavit pro tuto skladovou položku"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Použito v"
-#: stock/models.py:1139
+#: stock/models.py:1164
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:1173
msgid "Source Purchase Order"
msgstr "Zdrojová nákupní objednávka"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Nákupní objednávka pro tuto skladovou položku"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Cílová prodejní objednávka"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Odstranit po vyčerpání"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Převedeno na díl"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Množství přesahuje dostupné zásoby"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Díl není nastaven jako sledovatelný"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Množstvní musí být celé číslo"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
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:1979
msgid "Quantity does not match serial numbers"
msgstr "Množství neodpovídá sériovým číslům"
-#: stock/models.py:1936
+#: stock/models.py:1997
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:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Testovací šablona neexistuje"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "Skladová položka obsahuje jiné položky"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Skladová položka je ve výrobě"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Serializované zásoby nelze sloučit"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Duplicitní skladové položky"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Kódy stavu zásob se musí shodovat"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Sledování skladových položek"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Poznámky k záznamu"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Výsledek testu skladové položky"
-#: stock/models.py:3026
+#: stock/models.py:3099
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:3103
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:3108
msgid "Invalid value for this test"
msgstr "Neplatná hodnota pro tento test"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Výsledek testu"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Výstupní hodnota testu"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Příloha výsledků testu"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Poznámky testu"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Testovací stanice"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Začátek"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Čas začátku testu"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Ukončeno"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Čas dokončení testu"
@@ -8913,214 +9193,234 @@ msgstr "Použít velikost balení při přidání: definované množství je po
msgid "Use pack size"
msgstr "Použít velikost balení"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Zadejte sériová čísla pro nové položky"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Číslo dílu dodavatele"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Expirováno"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Podřízené položky"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Sledování položky"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Nákupní cena této skladové položky za jednotku nebo balení"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Zadejte počet skladových položek k serializaci"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "Nebyla poskytnuta žádná skladová položka"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Množství nesmí překročit dostupné skladové množství ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Cílové skladové umístění"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "K tomuto dílu nelze přiřadit sériová čísla"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Sériová čísla již existují"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Vyberte skladovou položku k instalaci"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Množství k instalaci"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Zadejte množství položek k instalaci"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Přidat poznámku o transakci (volitelné)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Množství k instalaci musí být alespoň 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Skladová položka je nedostupná"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Vybraný díl není v kusovníku"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Množství k instalaci nesmí překročit dostupné množství"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Cílové umístění pro odinstalovanou položku"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Vyberte díl pro převedení do skladové položky"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Vybraný díl není platnou volbou pro převod"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Nelze převést skladovou položku s přiřazeným dílem dodavetele"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Stavový kód skladové položky"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Vybrat skladové položky pro změnu stavu"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Nejsou vybrány žádné skladové položky"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Podumístění"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Nadřazené skladové umístění"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Díl musí být prodejný"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Položka je přidělena prodejní objednávce"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Položka je přidělena výrobnímu příkazu"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Zákazník, kterému mají být přiděleny skladové položky"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Vybraná společnost není zákazník"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Poznámky ke skladové položce"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Musí být poskytnut seznam skladových položek"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Poznámky ke sloučení skladových položek"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Povolit neodpovídající dodavatele"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Povolit sloučení skladových položek s různými díly dodavatele"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Povolit neodpovídající stav"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Povolit sloučení skladových položek s různými stavovými kódy"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Musí být poskytnuty alespoň dvě skladové položky"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Beze změny"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Hodnota primárního klíče skladové položky"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Skladová položka není skladem"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Skladová položka je již na skladě"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Množství nesmí být záporné"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Poznámky ke skladovací transakci"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Sloučit do existující zásoby"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Sloučit vrácené položky do existujích položek, pokud je to možné"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Další sériové číslo"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Předchozí sériové číslo"
@@ -9458,150 +9758,158 @@ 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"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administrátor"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr "Kusovník"
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Zakoupené objednávky"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Prodejní objednávky"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Návratové objednávky"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Uživatelské jméno"
diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po
index cae9326c6d..0560e0220d 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Language: da_DK\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Kunne ikke konvertere {original} til {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Ugyldigt antal angivet"
@@ -104,13 +105,13 @@ msgstr "Angiv dato"
msgid "Invalid decimal value"
msgstr "Ugyldig decimalværdi"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Bemærkninger"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Beskrivelse"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Beskrivelse (valgfri)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Ordre status"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Overordnet produktion"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Del"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategori"
@@ -605,7 +593,7 @@ msgstr "Kategori"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Tildelt til Mig"
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Produktion skal anulleres, før den kan slettes"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Forbrugsvare"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Valgfri"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Sporet"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Ordre Udestående"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Allokeret"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Produktionsordre"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lokation"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Produktionsordrer"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Monteringens stykliste er ikke blevet valideret"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Ansvarlig bruger eller gruppe skal specificeres"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Byggeordre enhed kan ikke ændres"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Produktionsordre reference"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Reference"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Vælg dele til produktion"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Salgsordrereference"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Kilde Lokation"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Ekstern Byg"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Denne byggeordre er gennemført eksternt"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Destinations Placering"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Vælg placering, hvor de færdige elementer vil blive gemt"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Produktions antal"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Antal lagervarer som skal produceres"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Afsluttede elementer"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Antal lagervarer som er færdiggjort"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Produktions Status"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Produktions statuskode"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Batch Kode"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Oprettelsesdato"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Planlagt startdato for denne byggeordre"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Projekteret afslutningsdato"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Dato for afslutning"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "udført af"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Udstedt af"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Bruger som udstedte denne byggeordre"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Ansvarlig"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Bruger eller gruppe ansvarlig for denne byggeordre"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Ekstern link"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link til ekstern URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Bygge Prioritet"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioritet af denne byggeordre"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Projektkode"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Projektkode for denne byggeordre"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Bygningsordre {build} er fuldført"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "En byggeordre er fuldført"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Antal"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Lagervarer"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Kilde lagervare"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Del Navn"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serienummer"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Indtast serienumre for bygge output"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automatisk alloker serienumre"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Følgende serienumre findes allerede eller er ugyldige"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Ikke tilladt"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Accepter som forbrugt af denne byggeordre"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Accepter Ikke tildelt"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Accepter at lagervarer ikke er fuldt tildelt til denne byggeordre"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Accepter ufuldført"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Bygge linje"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Varen skal være på lager"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Tilgængeligt antal ({q}) overskredet"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Stykliste Reference"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "Stykliste del ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Stykliste Del Navn"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Byg"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Leverandør Del"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Tildelt Antal"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Stykliste Del"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "I Produktion"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Ekstern Lager"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Tilgængelig Lager"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Afventende"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produktion"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "På Hold"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Annulleret"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Fuldført"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Bygningsordre {build} er fuldført"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "En byggeordre er fuldført"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Opdateret"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unik projekt kode"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projektbeskrivelse"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Værdien skal være en boolsk værdi"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Værdi skal være et heltalsværdi"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Skal være et gyldigt tal"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Værdien består ikke valideringskontrol"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Pris"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token for adgang"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Hemmelighed"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Besked ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Vært"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Vært, hvorfra denne meddelelse blev modtaget"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Overskrift"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Overskrift for denne besked"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titel"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Tilknytning"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publiceret"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Forfatter"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Opsummering"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Læs"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Blev dette nyhedselement læst?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Billedfil"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Vedhæftning"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Manglende fil"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Manglende eksternt link"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Vælg fil, der skal vedhæftes"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Filstørrelse"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Filstørrelse i bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Værdi"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Label"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Farve"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Farve der vil blive vist på frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Låst"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Parameter skabelon navn skal være unikt"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Stregkode Scan"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Stregkode data"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Sendt"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Fejlede"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Leveret"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Bekræftet"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Indkommende"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Udgående"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Intet Svar"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Spor Levering"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Spor Læst"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Spor Klik"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Global ID"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "Tråd ID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "E-mail Tråd"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "E-mail Tråde"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Afsendt"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Mistet"
@@ -5661,6 +5879,11 @@ msgstr "Refusion"
msgid "Reject"
msgstr "Afvis"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po
index 24a07e0a1d..8e1ba718af 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de_DE\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Konnte {original} nicht in {unit} umwandeln"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Keine gültige Menge"
@@ -104,13 +105,13 @@ msgstr "Datum eingeben"
msgid "Invalid decimal value"
msgstr "Ungültiger Dezimalwert"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notizen"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Beschreibung"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Beschreibung (optional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Währung"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Bestellstatus"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Eltern-Bauauftrag"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Varianten einschließen"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Varianten einschließen"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Varianten einschließen"
msgid "Part"
msgstr "Teil"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategorie"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Mir zugewiesen"
@@ -653,374 +641,365 @@ msgstr "Abgeschlossen vor"
msgid "Completed after"
msgstr "Abgeschlossen nach"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Baum ausschließen"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Verbrauchsmaterial"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Optional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Baugruppe"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Nachverfolgt"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Prüfbar"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Offene Bestellung"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Zugeordnet"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Verbraucht"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Bestellt"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Bauauftrag"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lagerort"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Bauprodukt"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Bauaufträge"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Die Stückliste wurde noch nicht kontrolliert"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Teil in Bauauftrag kann nicht geändert werden"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Zieldatum muss nach dem Startdatum liegen"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Bauauftragsreferenz"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referenz"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Kurze Beschreibung des Baus (optional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Teil für den Bauauftrag wählen"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Auftrag Referenz"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Quell-Lagerort"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Ziel-Lagerort"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Bau-Anzahl"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Anzahl der zu bauenden Lagerartikel"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Fertiggestellte Teile"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Anzahl der fertigen Lagerartikel"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Bauauftrags-Status"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Bau-Statuscode"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Losnummer"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Erstelldatum"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Startdatum des Bauauftrags"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Geplantes Startdatum des Bauauftrags"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "geplantes Fertigstellungsdatum"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Fertigstellungsdatum"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "Fertiggestellt von"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Aufgegeben von"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Nutzer der diesen Bauauftrag erstellt hat"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Verantwortlicher Benutzer"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Externer Link"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link zu einer externen URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Bauauftrags-Priorität"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Priorität dieses Bauauftrags"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Projektcode"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Projektcode für diesen Auftrag"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Bauauftrag {build} wurde fertiggestellt"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Ein Bauauftrag wurde fertiggestellt"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "kein Endprodukt angegeben"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Endprodukt bereits hergstellt"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Anzahl muss größer Null sein"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Bauauftragsposition"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Objekt bauen"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Objekt bauen"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Anzahl"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Erforderliche Menge für Auftrag"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "BestandObjekt ist zu oft zugewiesen"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Lagerartikel"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Quell-Lagerartikel"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Installiere in"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Ziel-Lagerartikel"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Name des Teils"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Endprodukt"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Dieses Endprodukt wurde bereits fertiggestellt"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Menge der Endprodukte angeben"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Ganzzahl für verfolgbare Teile erforderlich"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Seriennummer"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Seriennummer für dieses Endprodukt eingeben"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Lagerort für Bauprodukt"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Seriennummern automatisch zuweisen"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Eine Liste von Endprodukten muss angegeben werden"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Lagerort für ausgemusterte Ausgänge"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Zuteilungen verwerfen"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Lagerort für fertige Endprodukte"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Unvollständige Zuweisung akzeptieren"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Zugewiesen Bestand verbrauchen"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Verbrauche alle Bestände, die diesem Bauauftrag bereits zugewiesen wurden"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Unfertige Endprodukte entfernen"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Nicht erlaubt"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Als von diesem Bauauftrag verbraucht setzen"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Überbelegter Lagerbestand"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Wie sollen zusätzliche Lagerbestandteile, die dem Bauauftrag zugewiesen wurden, behandelt werden"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Der Bestand einiger Lagerartikel ist überbelegt"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Nicht zugewiesene akzeptieren"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zugewiesen wurden"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Unvollständig Zuweisung akzeptieren"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Akzeptieren, dass die erforderliche Anzahl der Bauaufträge nicht abgeschlossen ist"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Bauauftrag hat unvollständige Aufbauten"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Bauauftragsposition"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Endprodukt"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Bauauftragspositionsartikel"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Teil muss auf Lager sein"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Verfügbare Menge ({q}) überschritten"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Zuweisungen müssen angegeben werden"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Lagerort, von dem Teile bezogen werden sollen (leer lassen, um sie von jedem Lagerort zu nehmen)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Lagerort ausschließen"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Lagerartikel vom ausgewählten Ort ausschließen"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Wechselbares Lagerbestand"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Ersatzbestand"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Zuordnung von Ersatzteilen erlauben"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Optionale Positionen"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "Alle Artikel"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "Unverfolgte Artikel"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "Verfolgte Artikel"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "Item-Typ"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "Elementtyp zur automatischen Zuweisung auswählen"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Stücklisten-Referenz"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "Stückliste Teil-ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Stückliste Teil-Name"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Zusammenbau"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Zuliefererteil"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Zugewiesene Menge"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Teilkategorienname"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Nachverfolgbar"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Vererbt"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Varianten zulassen"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Stücklisten-Position"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "In Produktion"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Geplant zum Erstellen"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Externes Lager"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Verfügbarer Bestand"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Verfügbares Ersatzmaterial"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Verfügbarer Varianten Lagerbestand"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Optionale Notizen für den Bestandsverbrauch"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Dupliziere Bauauftrag Artikelzuordnung"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Ausstehend"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "in Arbeit"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Pausiert"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Storniert"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Fertig"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Bauauftrag {build} wurde fertiggestellt"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Ein Bauauftrag wurde fertiggestellt"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Bestand für Bauauftrag erforderlich"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Bauauftrag {build} erfordert zusätzlichen Bestand"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Überfälliger Bauauftrag"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Bauauftrag {bo} ist jetzt überfällig"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Link"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Datei"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs"
@@ -1554,794 +1553,835 @@ msgstr "Kein Plugin"
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Aktualisiert"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Zeitstempel der letzten Aktualisierung"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Eindeutiger Projektcode"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projektbeschreibung"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Einstellungs-Wert"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Wert ist keine gültige Option"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Wahrheitswert erforderlich"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Nur Ganzzahl eingeben"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Preis"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Endpunkt"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Endpunkt, an dem dieser Webhook empfangen wird"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Ist dieser Webhook aktiv"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token für Zugang"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Geheimnis"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Shared Secret für HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Nachrichten-ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Eindeutige Kennung für diese Nachricht"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Host von dem diese Nachricht empfangen wurde"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Kopfzeile"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Header dieser Nachricht"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Body"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Body dieser Nachricht"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Endpunkt, über den diese Nachricht empfangen wurde"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Bearbeitet"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titel"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Veröffentlicht"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Zusammenfassung"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Gelesen"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Wurde diese Nachricht gelesen?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Bilddatei"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Benutzerdefinierte Einheit"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Einheitensymbol muss eindeutig sein"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Einheitsname muss eine gültige Kennung sein"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Einheitsname"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Optionales Einheitssymbol"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definition"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Einheitsdefinition"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Anhang"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Fehlende Datei"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Fehlender externer Link"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Modelltyp"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Datei zum Anhängen auswählen"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Upload Datum"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Datum der hochgeladenen Datei"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Dateigröße"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Dateigröße in Bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Ungültiger Modelltyp für Anhang angegeben"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Wert"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Bezeichnung"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Farbe"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Farbe, die im Frontend angezeigt wird"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Auswahlliste"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Auswahllisten"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Name der Auswahlliste"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Beschreibung der Auswahlliste"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Gesperrt"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Ist diese Auswahlliste gesperrt?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Kann diese Auswahlliste benutzt werden?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "Standardeintrag"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Erstellt"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Zuletzt aktualisiert"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parameter Vorlage"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Checkbox-Parameter können keine Einheiten haben"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Checkbox-Parameter können keine Auswahl haben"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Auswahl muss einzigartig sein"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Vorlagen-Name des Parameters muss eindeutig sein"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Name des Parameters"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Einheiten"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Physikalische Einheiten für diesen Parameter"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Parameter-Beschreibung"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Checkbox"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Ist dieser Parameter eine Checkbox?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Auswahlmöglichkeiten"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Aktiviert"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Ungültige Auswahl für Parameterwert"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Wert"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Notiz"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Optionales Notizfeld"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Barcode Scan"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Zeitstempel"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontext"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Ergebnis"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Angekündigt"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Gesendet"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Fehlgeschlagen"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Zugestellt"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Bestätigt"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Eingehend"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Ausgehend"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Keine Rückmeldung"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Artikel erhalten"
@@ -2451,25 +2491,25 @@ msgstr "Schlüsselwort Parameter"
msgid "Task keyword arguments"
msgstr "Schlüsselwort Parameter für Aufgaben"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Modelltyp"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "Tage"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Prüfungsintervall aktualisieren"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatische Sicherung"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervall für automatische Sicherung"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Aufgabenlöschinterval"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Löschintervall für Fehlerprotokolle"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Löschintervall für Benachrichtigungen"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Bacode-Feature verwenden"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Barcode-Eingabeverzögerung"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Verzögerungszeit bei Barcode-Eingabe"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Barcode Webcam-Unterstützung"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Artikelrevisionen"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Revisions-Feld für Artikel aktivieren"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Löschen aus Baugruppe erlauben"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "IPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Mehrere Artikel mit gleicher IPN erlaubt"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Ändern von IPN erlaubt"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Teil-Stückliste kopieren"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Teil-Parameter kopieren"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Teil-Testdaten kopieren"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kategorie-Parametervorlage kopieren"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Teile sind standardmäßig Vorlagen"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Kaufbar"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Verkäuflich"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Artikel sind grundsätzlich verkaufbar"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuell"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Teile sind grundsätzlich virtuell"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Verwandte Teile anzeigen"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Verwandte Teile eines Teils anzeigen"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Initialer Lagerbestand"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Initiale Lieferantendaten"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Anzeigeformat für Teilenamen"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Format für den Namen eines Teiles"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Standardsymbol der Teilkategorie"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Dezimalstellen für minimalen Preis"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Dezimalstellen für maximalen Preis"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Zulieferer-Preise verwenden"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Kaufverlauf überschreiben"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Lagerartikel-Preis verwenden"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Lagerartikelpreis Alter"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Variantenpreise verwenden"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "Nur aktive Varianten"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Intervall für Neuberechnung von Preisen"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Interne Preise"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Interne Preise für Teile aktivieren"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Interne Preisüberschreibung"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Labeldruck aktivieren"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "Labeldruck über die Website aktivieren"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "Label Bild DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Berichte aktivieren"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Berichterstellung aktivieren"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Entwickler-Modus"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Berichtsfehler protokollieren"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Standardseitenformat für PDF-Bericht"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Parameter Einheiten durchsetzen"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Global einzigartige Seriennummern"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Erschöpften Lagerartikel löschen"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Losnummer Vorlage"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Bestands-Ablauf"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Ablaufen von Bestand ermöglichen"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Abgelaufenen Bestand verkaufen"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Verkauf von abgelaufenem Bestand erlaubt"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Bestands-Stehzeit"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Abgelaufenen Bestand verbauen"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Verbauen von abgelaufenen Bestand erlaubt"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Bestands-Eigentümerkontrolle"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Standardsymbol für Lagerort"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Zeige installierte Lagerartikel"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "Prüfe BOM bei der Installation von Elementen"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Bauauftragsreferenz-Muster"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blockieren bis Test bestanden"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Rücksendungen aktivieren"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Referenz Muster für Rücksendungen"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Abgeschlossene Rücksendungen bearbeiten"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Auftragsreferenz-Muster"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Auftrag Standardsendung"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Erstelle eine Standardsendung für Aufträge"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Abgeschlossene Aufträge bearbeiten"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Versendete Bestellungen als abgeschlossen markieren"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Bestellungsreferenz-Muster"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Abgeschlossene Einkaufsaufträge bearbeiten"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Bestellungen automatisch abschließen"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Passwort vergessen aktivieren"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Registrierung erlauben"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "SSO aktivieren"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "SSO auf den Anmeldeseiten aktivieren"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "SSO Selbstregistrierung aktivieren"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "SSO Gruppensynchronisation aktivieren"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "SSO Gruppenschlüssel"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email-Adresse erforderlich"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "SSO-Benutzer automatisch ausfüllen"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "E-Mail zweimal"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Passwort zweimal"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Erlaubte Domains"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Gruppe bei Registrierung"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "MFA erzwingen"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Plugins beim Start prüfen"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Nach Plugin-Aktualisierungen suchen"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "URL-Integration aktivieren"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Plugins zum Hinzufügen von URLs aktivieren"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Navigations-Integration aktivieren"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Plugins zur Integration in die Navigation aktivieren"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "App-Integration aktivieren"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Plugins zum Hinzufügen von Apps aktivieren"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Terminplan-Integration aktivieren"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Geplante Aufgaben aktivieren"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Ereignis-Integration aktivieren"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Externe Standorte ausschließen"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Automatische Inventur-Periode"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Vollständige Namen von Benutzern anzeigen"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Teststation-Daten aktivieren"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Fehlerberichte empfangen"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Benachrichtigungen bei Systemfehlern erhalten"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Zuletzt verwendete Druckmaschinen"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Eine leere Domain ist nicht erlaubt."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Ungültiger Domainname: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Hersteller"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Firma"
@@ -4050,8 +4193,8 @@ msgstr "Kontakt-Telefon"
msgid "Contact email address"
msgstr "Kontakt-Email"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adresse"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Basisteil"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Hersteller-Teilenummer"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Zulieferer"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Lagerbestandseinheit (SKU) des Zulieferers"
@@ -4282,16 +4425,16 @@ msgstr "Teil-URL des Zulieferers"
msgid "Supplier part description"
msgstr "Zuliefererbeschreibung des Teils"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "Basiskosten"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Mindestpreis"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Verpackungen"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "Vielfache"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr "Fehler"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Gültig"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Unbekannt"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Bestellreferenz"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Ausstehend"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Erstellt von"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Hat Preise"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Bestellung"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Bestellung abgeschlossen"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Internes Teil"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Bestellung ausstehend"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Fertig"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Rücksendeauftrag"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Gesamtpreis"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Gesamtpreis für diese Bestellung"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Auftragswährung"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Auftragsbeschreibung (optional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link auf externe Seite"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Zieldatum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Geplantes Lieferdatum für Auftrag."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Aufgabedatum"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Datum an dem die Bestellung aufgegeben wurde"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Ansprechpartner für diesen Auftrag"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Firmenadresse für diesen Auftrag"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Bestellungs-Status"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Firma bei der die Teile bestellt werden"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Zulieferer-Referenz"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Zulieferer Bestellreferenz"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "Empfangen von"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Datum an dem der Auftrag fertigstellt wurde"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Ziel-Lager"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Position stimmt nicht mit Kaufauftrag überein"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Anzahl muss eine positive Zahl sein"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Firma an die die Teile verkauft werden"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Kundenreferenz"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Bestellreferenz"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Versanddatum"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "Versand von"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Bestellung ist bereits abgeschlossen"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Bestellung ist bereits storniert"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Anzahl"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Position - Referenz"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Position - Notizen"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Positionsbeschreibung (optional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Zusätzlicher Kontext für diese Zeile"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Stückpreis"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Lieferantenteil muss mit Lieferant übereinstimmen"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Zuliefererteil"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Empfangen"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Empfangene Objekt-Anzahl"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Preis"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Preis pro Einheit"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Verkaufspreis"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Stückverkaufspreis"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Versendet"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Versendete Menge"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Versanddatum"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Lieferdatum"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Versanddatum"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Kontrolliert von"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Sendung"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Sendungsnummer"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Sendungsverfolgungsnummer"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informationen zur Sendungsverfolgung"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Rechnungsnummer"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Referenznummer für zugehörige Rechnung"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Sendung wurde bereits versandt"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Sendung hat keine zugewiesene Lagerartikel"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Lagerartikel wurde nicht zugewiesen"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Position"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Sendungsnummer-Referenz"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Position"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Lagerartikel für Zuordnung auswählen"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Anzahl für Bestandszuordnung eingeben"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Rücksendungsreferenz"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Firma von der die Artikel zurückgeschickt werden"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Status der Rücksendung"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Artikel zur Rücksendung auswählen"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Empfangsdatum"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Ergebnis"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Ergebnis für dieses Zeilenelement"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Parameter kopieren"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Positionen"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Abgeschlossene Positionen"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Lieferant"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Bestellung kann nicht verworfen werden"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Auftrag hat unvollständige Positionen"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Der Auftrag ist nicht offen"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automatische Preisgestaltung"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Kaufpreiswährung"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Elemente zusammenfügen"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Lieferanten-Teilenummer"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Interne Teilenummer"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Zuliefererteil muss ausgewählt werden"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Bestellung muss angegeben sein"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Lieferant muss mit der Bestellung übereinstimmen"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Position"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Zielort für empfangene Teile auswählen"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Ablaufdatum"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Seriennummern für eingehende Lagerartikel"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Barcode"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Gescannter Barcode"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Barcode ist bereits in Verwendung"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Positionen müssen angegeben werden"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Ziel-Lagerort muss angegeben werden"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Barcode muss eindeutig sein"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Abgeschlossene Sendungen"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Verkaufspreis-Währung"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Keine Sendungsdetails angegeben"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "Position ist nicht diesem Auftrag zugeordnet"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Anzahl muss positiv sein"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Seriennummern zum Zuweisen eingeben"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Sendung wurde bereits versandt"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Sendung ist nicht diesem Auftrag zugeordnet"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Folgende Serienummern konnten nicht gefunden werden"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Artikel der Bestellzeile zurücksenden"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Artikel entspricht nicht der Rücksendeschrift"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Artikel wurde bereits erhalten"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Verkaufspreis-Währung"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Verloren"
@@ -5661,6 +5879,11 @@ msgstr "Rückerstattung"
msgid "Reject"
msgstr "Ablehnen"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Aufgegeben"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Überfällige Bestellung"
@@ -5696,7 +5919,7 @@ msgstr "Markiert"
msgid "Filter by starred categories"
msgstr "Nach markierten Kategorien filtern"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Ebenen"
@@ -5704,7 +5927,7 @@ msgstr "Ebenen"
msgid "Filter by category depth"
msgstr "Filter nach Kategorietiefe"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Oberste Ebene"
@@ -5712,7 +5935,7 @@ msgstr "Oberste Ebene"
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Mehrstufig"
@@ -5732,75 +5955,79 @@ msgstr "Nach übergeordneter Kategorie filtern"
msgid "Exclude sub-categories under the specified category"
msgstr "Unterkategorien in der angegebenen Kategorie ausschließen"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Ergebnisse"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Verwendet"
@@ -5809,11 +6036,11 @@ msgstr "Verwendet"
msgid "Part Category"
msgstr "Teil-Kategorie"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Standard-Lagerort"
msgid "Default location for parts in this category"
msgstr "Standard-Lagerort für Teile dieser Kategorie"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Strukturell"
@@ -5837,12 +6064,12 @@ msgstr "Standard Stichwörter"
msgid "Default keywords for parts in this category"
msgstr "Standard-Stichworte für Teile dieser Kategorie"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Symbol"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Symbol (optional)"
@@ -5862,984 +6089,1028 @@ msgstr "Standard-Wert"
msgid "Default Parameter Value"
msgstr "Standard Parameter Wert"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Mehrere verkaufen"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Währung für die Berechnung der Preise im Cache"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimale Stücklisten Kosten"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minimale Kosten für Teile"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maximale Stücklisten Kosten"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maximale Kosten für Teile"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimale Einkaufskosten"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimale historische Kaufkosten"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maximale Einkaufskosten"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maximale historische Einkaufskosten"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimaler interner Preis"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimale Kosten basierend auf den internen Staffelpreisen"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maximaler interner Preis"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maximale Kosten basierend auf internen Preisstaffeln"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimaler Lieferantenpreis"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Mindestpreis für Teil von externen Lieferanten"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maximaler Lieferantenpreis"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maximaler Preis für Teil von externen Lieferanten"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimale Variantenkosten"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Berechnete minimale Kosten für Variantenteile"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maximale Variantenkosten"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Berechnete maximale Kosten für Variantenteile"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimale Kosten"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Mindestkosten überschreiben"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maximale Kosten"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Maximale Kosten überschreiben"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Berechnete Mindestkosten"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Berechnete Maximalkosten"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Mindestverkaufspreis"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Mindestverkaufspreis basierend auf Staffelpreisen"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maximaler Verkaufspreis"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maximalverkaufspreis basierend auf Staffelpreisen"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Mindestverkaufskosten"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimaler historischer Verkaufspreis"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maximale Verkaufskosten"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maximaler historischer Verkaufspreis"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Teil für die Inventur"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Stückzahl"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Datum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Datum der Inventur"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Mindestbestandswert"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Geschätzter Mindestwert des vorhandenen Bestands"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maximaler Bestandswert"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Geschätzter Maximalwert des vorhandenen Bestands"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Test-Name"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Namen für diesen Test eingeben"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Testschlüssel"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Vereinfachter Schlüssel zum Test"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Test-Beschreibung"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Beschreibung für diesen Test eingeben"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Ist dieser Test aktiviert?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Benötigt"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Muss dieser Test erfolgreich sein?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Erfordert Wert"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Anhang muss eingegeben werden"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Ausgangsteil auswählen"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Untergeordnetes Teil"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Teil für die Nutzung in der Stückliste auswählen"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Diese Stücklisten-Position ist optional"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Referenz der Postion auf der Stückliste"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Notizen zur Stücklisten-Position"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Prüfsumme"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Prüfsumme der Stückliste"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "überprüft"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Diese Stücklistenposition wurde validiert"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Wird vererbt"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Menge muss eine Ganzzahl sein"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Zuliefererteil muss festgelegt sein"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Stücklisten Ersatzteile"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Übergeordnete Stücklisten Position"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Ersatzteil"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Teil 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Teil 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "verknüpftes Teil auswählen"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Doppelte Beziehung existiert bereits"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Übergeordnete Kategorie"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Übergeordnete Teilkategorie"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Unter-Kategorien"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Ergebnisse"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Kaufwährung dieses Lagerartikels"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Originalteil"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Originalteil zum Duplizieren auswählen"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Bild kopieren"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Bild vom Originalteil kopieren"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Stückliste kopieren"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Stückliste vom Originalteil kopieren"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Parameterdaten vom Originalteil kopieren"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Anmerkungen kopieren"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Notizen aus Originalteil kopieren"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Start-Bestandsmenge"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Initialer Lagerort"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Lagerstandort für dieses Teil angeben"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Hersteller-Teilenummer"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Ausgewählte Firma ist kein gültiger Lieferant"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Ausgewählte Firma ist kein gültiger Hersteller"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "Herstellerteil mit dieser MPN existiert bereits"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "Lieferantenteil mit dieser SKU existiert bereits"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Kategoriename"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Im Bau"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Lagerartikel"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Nicht zugewiesenes Lager"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Alternatives Lager"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Teil duplizieren"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Initiale Daten von anderem Teil kopieren"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Initialer Lagerbestand"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Erstelle Teil mit Ausgangsbestand"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Lieferanteninformationen"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Lieferanteninformationen zu diesem Teil hinzufügen"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Kategorieparameter kopieren"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Vorhandenes Bild"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Dateiname eines vorhandenen Teilbildes"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Bilddatei existiert nicht"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Gesamte Stückliste validieren"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Herstellbar"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Niedrigster Preis"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Berechneten Wert für Mindestpreis überschreiben"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Mindestpreis Währung"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Höchster Preis"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Berechneten Wert für maximalen Preis überschreiben"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Maximalpreis Währung"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Aktualisieren"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Preis für dieses Teil aktualisieren"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Teil auswählen, von dem Stückliste kopiert wird"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Bestehende Daten entfernen"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Vererbtes einschließen"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Ungültige Zeilen überspringen"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Ersatzteile kopieren"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Paket-Plugin"
msgid "Plugin"
msgstr "Plugin"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Kein Autor gefunden"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Benötigte Materialien"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Artikelbild"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Aufgegeben"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "benötigt für"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Seriennummer"
@@ -8292,7 +8560,7 @@ msgstr "Lagerartikel Test-Bericht"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Verbaute Objekte"
@@ -8325,6 +8593,10 @@ msgstr "Kein Ergebnis (erforderlich)"
msgid "No result"
msgstr "Kein Ergebnis"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "part_image tag benötigt eine Bauteilinstanz"
msgid "company_image tag requires a Company instance"
msgstr "company_image tag erfordert eine Firmeninstanz"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filtern nach Standorttiefe"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Unterorte in gefilterte Ergebnisse einbeziehen"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Übergeordneter Ort"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtern nach übergeordnetem Ort"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Statuscode"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Externer Standort"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Teile-Baum"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Gültigkeitsdauer vor"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Gültigkeitsdauer nach"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "überfällig"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Menge ist erforderlich"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Gültiges Teil muss angegeben werden"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Der angegebene Lieferantenartikel existiert nicht"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Lagerstandort Typ"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Lagerstandorte Typen"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Bestand-Lagerort"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Bestand-Lagerorte"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Besitzer"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Besitzer auswählen"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Extern"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Dies ist ein externer Lagerort"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Standorttyp"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Standortart dieses Standortes"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Teil kann nicht zu sich selbst gehören"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Eltern-Lagerartikel"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Basis-Teil"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Verpackung, in der dieser Lagerartikel gelagert ist"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "verbaut in"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Ist dieses Teil in einem anderen verbaut?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Seriennummer für dieses Teil"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Losnummer für diesen Lagerartikel"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Bestand"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Quellbau"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Bauauftrag für diesen Lagerartikel"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Verbraucht von"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Bauauftrag der diesen Lagerartikel verbrauchte"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Quelle Bestellung"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Bestellung für diesen Lagerartikel"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Ziel-Auftrag"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Löschen wenn leer"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Preis für eine Einheit bei Einkauf"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "In Teil umgewandelt"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Teil ist nicht verfolgbar"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Anzahl muss eine Ganzzahl sein"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Anzahl stimmt nicht mit den Seriennummern überein"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Testvorlage existiert nicht"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "Artikel wurde einem Kundenauftrag zugewiesen"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "Lagerartikel ist in anderem Element verbaut"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Lagerartikel enthält andere Artikel"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Lagerartikel wird aktuell produziert"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Artikel duplizeren"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "Lagerartikel müssen auf dasselbe Teil verweisen"
-#: stock/models.py:2106
+#: stock/models.py:2167
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:2172
msgid "Stock status codes must match"
msgstr "Status-Codes müssen zusammenpassen"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Eintrags-Notizen"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Wert muss für diesen Test angegeben werden"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Anhang muss für diesen Test hochgeladen werden"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Testergebnis"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Test Ausgabe Wert"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Test Ergebnis Anhang"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Test Notizen"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Teststation"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Gestartet"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Der Zeitstempel des Teststarts"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Fertiggestellt"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Der Zeitstempel der Test-Beendigung"
@@ -8913,214 +9193,234 @@ msgstr "Packungsgröße beim Hinzufügen verwenden: Die definierte Menge ist die
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Seriennummern für neue Teile eingeben"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "abgelaufen"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Untergeordnete Objekte"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Ziel-Bestand"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Seriennummern können diesem Teil nicht zugewiesen werden"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Seriennummern existieren bereits"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Lagerartikel für Installation auswählen"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Zu installierende Menge"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Anzahl der zu verwendenden Artikel eingeben"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr " Transaktionsnotizen hinzufügen (optional)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Die zu verwendende Menge muss mindestens 1 sein"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Lagerartikel ist nicht verfügbar"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Ausgewähltes Teil ist nicht in der Stückliste"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Ziel Lagerort für unverbautes Objekt"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Wählen Sie einen Teil aus, zu dem dieser Lagerartikel geändert werden soll"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Das ausgewählte Teil ist keine gültige Option für die Umwandlung"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Lagerartikel Status-Code"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Lagerartikel auswählen, um den Status zu ändern"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Keine Lagerartikel ausgewählt"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Unter-Lagerorte"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Übergeordneter Lagerort"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Teil muss verkaufbar sein"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Artikel ist einem Kundenauftrag zugeordnet"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Artikel ist einem Fertigungsauftrag zugeordnet"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Kunde zum Zuweisen von Lagerartikel"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Ausgewählte Firma ist kein Kunde"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Notizen zur Lagerzuordnung"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Eine Liste der Lagerbestände muss angegeben werden"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notizen zur Lagerartikelzusammenführung"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Unterschiedliche Lieferanten erlauben"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Unterschiedliche Status erlauben"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Mindestens zwei Lagerartikel müssen angegeben werden"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Keine Änderung"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Primärschlüssel Lagerelement"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Bestandsbewegungsnotizen"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Nächste Seriennummer"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Vorherige Seriennummer"
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Bestellungen"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Aufträge"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Rücksendeaufträge"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Benutzername"
diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po
index 7232c7d613..c744afb3a2 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Language: el_GR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σε {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Μη έγκυρη ποσότητα"
@@ -104,13 +105,13 @@ msgstr "Εισάγετε ημερομηνία"
msgid "Invalid decimal value"
msgstr "Μη έγκυρη δεκαδική τιμή"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Σημειώσεις"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Περιγραφή"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Περιγραφή (προαιρετική)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "Πρέπει να είναι αριθμός"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Νόμισμα"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Κατάσταση παραγγελίας"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Γονική Κατασκευή"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Συμπερίληψη παραλλαγών"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Συμπερίληψη παραλλαγών"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Συμπερίληψη παραλλαγών"
msgid "Part"
msgstr "Εξάρτημα"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Κατηγορία"
@@ -605,7 +593,7 @@ msgstr "Κατηγορία"
msgid "Ancestor Build"
msgstr "Πρόγονος κατασκευής"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Ανατεθειμένες σε εμένα"
@@ -653,374 +641,365 @@ msgstr "Ολοκληρώθηκε πριν από"
msgid "Completed after"
msgstr "Ολοκληρώθηκε μετά από"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "Ελάχιστη ημερομηνία"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Μέγιστη ημερομηνία"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Εξαίρεση δέντρου"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Αναλώσιμο"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Προαιρετικό"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Συναρμολόγηση"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Υπό παρακολούθηση"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Υπό δοκιμή"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Εκκρεμής παραγγελία"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Κατανεμημένο"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Καταναλωμένο"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Σε παραγγελία"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Σειρά Κατασκευής"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Τοποθεσία"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Έξοδος"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Φιλτράρισμα με βάση το ID του αποθέματος εξόδου. Χρησιμοποιήστε 'null' για να βρείτε μη εγκατεστημένα στοιχεία κατασκευής"
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Δημιουργία Παραγγελιών"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Το BOM της συναρμολόγησης δεν έχει επικυρωθεί"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για ανενεργό Aντικειμένου"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για μη κλειδωμένο Aντικειμένου"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Οι εντολές κατασκευής μπορούν να εκτελεστούν εξωτερικά μόνο για Προϊόντα που μπορούν να αγοραστούν"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Πρέπει να οριστεί υπεύθυνος χρήστης ή ομάδα"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Η ημερομηνία στόχος πρέπει να είναι μετά την ημερομηνία έναρξης"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Αναφορά Παραγγελίας Κατασκευής"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Αναφορά"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Επιλέξτε τμήμα για κατασκευή"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Κωδικός Παραγγελίας Πωλήσεων"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Τοποθεσία Προέλευσης"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Εξωτερική κατασκευή"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Αυτή η εντολή κατασκευής εκτελείται εξωτερικά"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Τοποθεσία Προορισμού"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Ποσότητα Κατασκευής"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Αριθμός αντικειμένων για κατασκευή"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Ολοκληρωμένα αντικείμενα"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Κατάσταση Κατασκευής"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Κωδικός κατάστασης κατασκευής"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Κωδικός Παρτίδας"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Ημερομηνία Δημιουργίας"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Ημερομηνία έναρξης κατασκευής"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την εντολή κατασκευής"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Ημερομηνία ολοκλήρωσης στόχου"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Ημερομηνία ολοκλήρωσης"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "ολοκληρώθηκε από"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Εκδόθηκε από"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Υπεύθυνος"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Εξωτερικοί σύνδεσμοι"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Προτεραιότητα Κατασκευής"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Προτεραιότητα αυτής της εντολής κατασκευής"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Κωδικός Έργου"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με ανοιχτές θυγατρικές κατασκευές"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με μη ολοκληρωμένα προϊόντα"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Αποτυχία εκχώρησης εργασίας για την ολοκλήρωση των κατανομών κατασκευής"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Δεν καθορίστηκε έξοδος κατασκευής"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Γραμμή εντολής κατασκευής"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Αντικείμενο κατασκευής"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Αντικείμενο κατασκευής"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Ποσότητα"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Ποσότητα καταναλωμένου αποθέματος"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Στοιχείο Αποθέματος"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Στοιχείο πηγαίου αποθέματος"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Εγκατάσταση σε"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Αποθήκη προορισμού"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Επίπεδο κατασκευής"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Όνομα Προϊόντος"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Κατασκευή Εξόδου"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Σειριακοί αριθμοί"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Απόρριψη Κατανομών"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Αιτία απόρριψης προϊόντων κατασκευής"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Αποδοχή Ελλιπούς Δέσμευσης"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Κατανάλωση δεσμευμένου αποθέματος"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Αφαίρεση Ατελείωτων Προϊόντων"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Δεν επιτρέπεται"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Υπερ-δεσμευμένο Απόθεμα"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Αποδοχή Μη Δεσμευμένων"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Αποδοχή Μη Ολοκληρωμένων"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Γραμμή Κατασκευής"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Προϊόν Κατασκευής"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Αντικείμενο Γραμμής Κατασκευής"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Πρέπει να δοθούν στοιχεία κατανομής"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Εξαίρεση τοποθεσίας"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Εναλλάξιμο απόθεμα"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Εναλλακτικό απόθεμα"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Προαιρετικά στοιχεία"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Αναφορά BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID Προϊόντος BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Όνομα Προϊόντος BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Κατασκευή"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Aντικειμένου προμηθευτή"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Δεσμευμένη ποσότητα"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Αναφορά κατασκευής"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Όνομα κατηγορίας Προϊόντος"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Ανιχνεύσιμο"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Κληρονομημένο"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Να επιτρέπονται παραλλαγές"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Στοιχείο BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Σε παραγωγή"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Προγραμματισμένο για κατασκευή"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Εξωτερικό απόθεμα"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Διαθέσιμο απόθεμα"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Διαθέσιμο εναλλακτικό απόθεμα"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Διαθέσιμο απόθεμα παραλλαγών"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Διπλή κατανομή στοιχείου κατασκευής"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Διπλή κατανομή γραμμής κατασκευής"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Σε εκκρεμότητα"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Παραγωγή"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Σε αναμονή"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Ακυρώθηκε"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Ολοκληρώθηκε"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Απαιτείται απόθεμα για την εντολή κατασκευής"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Η εντολή κατασκευής {build} απαιτεί επιπλέον απόθεμα"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Εκπρόθεσμη εντολή κατασκευής"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Είναι σύνδεσμος"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Είναι αρχείο"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο"
@@ -1554,794 +1553,835 @@ msgstr "Χωρίς πρόσθετο"
msgid "Project Code Label"
msgstr "Ετικέτα κωδικού έργου"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Ενημερώθηκε"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Χρονική σήμανση τελευταίας ενημέρωσης"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Ενημερώθηκε από"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Χρήστης που ενημέρωσε τελευταίος αυτό το Aντικειμένου"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Μοναδικός κωδικός έργου"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Περιγραφή έργου"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτό το έργο"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Κλειδί ρυθμίσεων"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Τιμή ρυθμίσεων"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Η επιλεγμένη τιμή δεν είναι έγκυρη επιλογή"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Η τιμή πρέπει να είναι boolean"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Η τιμή πρέπει να είναι ακέραιος αριθμός"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Η τιμή πρέπει να είναι έγκυρος αριθμός"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Η τιμή δεν περνά τους ελέγχους εγκυρότητας"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "Ποσότητα κλιμακωτής τιμής"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Τιμή"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Τιμή μονάδας στη συγκεκριμένη ποσότητα"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Endpoint"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webhook"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "Όνομα για αυτό το webhook"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Είναι αυτό το webhook ενεργό"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token πρόσβασης"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Μυστικό"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Κοινόχρηστο μυστικό για HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID μηνύματος"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Host από τον οποίο παραλήφθηκε αυτό το μήνυμα"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Κεφαλίδα"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Κεφαλίδα αυτού του μηνύματος"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Κείμενο"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Κείμενο αυτού του μηνύματος"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Endpoint στο οποίο παραλήφθηκε αυτό το μήνυμα"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Επεξεργάστηκε"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Ολοκληρώθηκε η εργασία σε αυτό το μήνυμα;"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Τίτλος"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Σύνδεσμος"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Δημοσιεύθηκε"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Συντάκτης"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Περίληψη"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Αναγνωσμένο"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Διαβάστηκε αυτό το νέο;"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Αρχείο εικόνας"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Τύπος μοντέλου-στόχου για αυτή την εικόνα"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "ID μοντέλου-στόχου για αυτή την εικόνα"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Προσαρμοσμένη μονάδα"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Το σύμβολο μονάδας πρέπει να είναι μοναδικό"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Το όνομα μονάδας πρέπει να είναι έγκυρο αναγνωριστικό"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Όνομα μονάδας"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Σύμβολο"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Προαιρετικό σύμβολο μονάδας"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Ορισμός"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Ορισμός μονάδας"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Συνημμένο"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Το αρχείο λείπει"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Λείπει ο εξωτερικός σύνδεσμος"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Τύπος μοντέλου"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Τύπος μοντέλου-στόχου για την εικόνα"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Επιλέξτε αρχείο για επισύναψη"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Σχόλιο"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Σχόλιο συνημμένου"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Ημερομηνία μεταφόρτωσης"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Ημερομηνία μεταφόρτωσης του αρχείου"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Μέγεθος αρχείου"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Μέγεθος αρχείου σε bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Προσαρμοσμένη κατάσταση"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Προσαρμοσμένες καταστάσεις"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Σετ κατάστασης αναφοράς"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "Σετ καταστάσεων που επεκτείνεται με αυτή την προσαρμοσμένη κατάσταση"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Λογικό κλειδί"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Τιμή"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη βάση δεδομένων των μοντέλων"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "Όνομα της κατάστασης"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Ετικέτα"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "Ετικέτα που θα εμφανίζεται στο frontend"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Χρώμα"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Χρώμα που θα εμφανίζεται στο frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Μοντέλο"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Μοντέλο με το οποίο συσχετίζεται αυτή η κατάσταση"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Πρέπει να επιλεγεί μοντέλο"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Πρέπει να επιλεγεί κλειδί"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Πρέπει να επιλεγεί λογικό κλειδί"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "Το κλειδί πρέπει να είναι διαφορετικό από το λογικό κλειδί"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "Πρέπει να δοθεί έγκυρη κλάση κατάστασης αναφοράς"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "Το κλειδί πρέπει να είναι διαφορετικό από τα λογικά κλειδιά της κατάστασης αναφοράς"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λογικά κλειδιά της κατάστασης αναφοράς"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Λίστα επιλογών"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Λίστες επιλογών"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Όνομα της λίστας επιλογών"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Περιγραφή της λίστας επιλογών"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Κλειδωμένο"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Είναι αυτή η λίστα επιλογών κλειδωμένη;"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Μπορεί να χρησιμοποιηθεί αυτή η λίστα επιλογών;"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Πρόσθετο πηγής"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Πρόσθετο που παρέχει τη λίστα επιλογών"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Συμβολοσειρά πηγής"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "Προαιρετική συμβολοσειρά που ταυτοποιεί την πηγή που χρησιμοποιείται για αυτή τη λίστα"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "Προεπιλεγμένη καταχώρηση"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Δημιουργήθηκε"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "Ημερομηνία και ώρα δημιουργίας της λίστας επιλογών"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Τελευταία ενημέρωση"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "Καταχώρηση λίστας επιλογών"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Καταχωρήσεις λίστας επιλογών"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Τιμή της καταχώρησης λίστας επιλογών"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Περιγραφή της καταχώρησης λίστας επιλογών"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Πρότυπο παραμέτρου"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Οι επιλογές πρέπει να είναι μοναδικές"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Όνομα παραμέτρου"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Μονάδες"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Φυσικές μονάδες για αυτή την παράμετρο"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Περιγραφή παραμέτρου"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Checkbox"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Είναι αυτή η παράμετρος τύπου checkbox;"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Επιλογές"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Λίστα επιλογών για αυτή την παράμετρο"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Ενεργό"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Δεδομένα"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "Τιμή παραμέτρου"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Σημείωση"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Προαιρετικό πεδίο σημείωσης"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Σάρωση barcode"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Δεδομένα barcode"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "Χρήστης που σάρωσε το barcode"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Χρονική σήμανση"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Ημερομηνία και ώρα της σάρωσης barcode"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Πλαίσιο"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Δεδομένα πλαισίου για τη σάρωση barcode"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Απόκριση"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Αποτέλεσμα"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Ήταν επιτυχημένη η σάρωση barcode;"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Παρουσιάστηκε σφάλμα"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "Μήνυμα email"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "Μηνύματα email"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Ανακοινώθηκε"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Εστάλη"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Απέτυχε"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Παραδόθηκε"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Επιβεβαιώθηκε"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Εισερχόμενο"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Εξερχόμενο"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Χωρίς απάντηση"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Παρακολούθηση παράδοσης"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Παρακολούθηση ανάγνωσης"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Παρακολούθηση κλικ"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Global ID"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "ID νήματος"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "Νήμα"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Νήμα email"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Νήματα email"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Ξεκίνησε εσωτερικά"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Είδη που παραλήφθηκαν"
@@ -2451,25 +2491,25 @@ msgstr "Ορίσματα λέξεων-κλειδιών"
msgid "Task keyword arguments"
msgstr "Ορίσματα λέξεων-κλειδιών της εργασίας"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Τύπος μοντέλου"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Η λίστα επιλογών είναι κλειδωμένη"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "ημέρες"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "Πρόσθετο ενημέρωσης νομισμάτων που θα χρησιμοποιηθεί"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "Λήψη από URL"
+msgid "Upload Size Limit"
+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 "Όριο μεγέθους λήψης"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "Να απαιτείται ορισμός σχήματος κατά την επικύρωση URL"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "Διάστημα ελέγχου ενημερώσεων"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "Κάθε πότε θα γίνεται έλεγχος για ενημερώσεις (0 για απενεργοποίηση)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "Αυτόματο αντίγραφο ασφαλείας"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "Ενεργοποίηση αυτόματου backup της βάσης δεδομένων και των media αρχείων"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "Διάστημα αυτόματου backup"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "Ορίστε τον αριθμό ημερών μεταξύ των αυτόματων backup"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "Διάστημα διαγραφής εργασιών"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "Τα αποτελέσματα εργασιών παρασκηνίου θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "Διάστημα διαγραφής log σφαλμάτων"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "Τα log σφαλμάτων θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "Διάστημα διαγραφής ειδοποιήσεων"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "Οι ειδοποιήσεις χρηστών θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "Διάστημα διαγραφής email"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "Τα μηνύματα email θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "Προστασία log email"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "Αποτροπή διαγραφής εγγραφών log email"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Υποστήριξη barcode"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "Ενεργοποίηση υποστήριξης σαρωτή barcode στο web interface"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "Αποθήκευση αποτελεσμάτων barcode"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "Αποθήκευση των αποτελεσμάτων σάρωσης barcode στη βάση δεδομένων"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "Μέγιστος αριθμός σαρώσεων barcode"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "Μέγιστος αριθμός αποτελεσμάτων σάρωσης barcode που θα αποθηκεύονται"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Καθυστέρηση εισόδου barcode"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Χρόνος καθυστέρησης επεξεργασίας εισόδου barcode"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Υποστήριξη barcode μέσω webcam"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "Να επιτρέπεται σάρωση barcode μέσω webcam στο πρόγραμμα περιήγησης"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "Εμφάνιση δεδομένων barcode"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "Εμφάνιση των δεδομένων barcode στο πρόγραμμα περιήγησης ως κείμενο"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "Πρόσθετο δημιουργίας barcode"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "Πρόσθετο που θα χρησιμοποιείται για εσωτερική δημιουργία δεδομένων barcode"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Εκδόσεις Προϊόντων"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Ενεργοποίηση πεδίου έκδοσης για Aντικειμένου"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Μόνο εκδόσεις συναρμολογήσεων"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Να επιτρέπονται εκδόσεις μόνο για Προϊόντα συναρμολόγησης"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Να επιτρέπεται διαγραφή από συναρμολόγηση"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "Να επιτρέπεται η διαγραφή Προϊόντων που χρησιμοποιούνται σε συναρμολόγηση"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "Πρότυπο regular expression για αντιστοίχιση IPN Προϊόντος"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "Να επιτρέπονται διπλά IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "Να επιτρέπεται σε πολλαπλά Προϊόντα να μοιράζονται το ίδιο IPN"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "Να επιτρέπεται η επεξεργασία IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "Να επιτρέπεται η αλλαγή της τιμής IPN κατά την επεξεργασία ενός Προϊόντος"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "Αντιγραφή δεδομένων BOM Προϊόντος"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "Αντιγραφή δεδομένων BOM από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "Αντιγραφή δεδομένων παραμέτρων Προϊόντος"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "Αντιγραφή δεδομένων παραμέτρων από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "Αντιγραφή δεδομένων δοκιμών Προϊόντος"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "Αντιγραφή δεδομένων δοκιμών από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας κατά τη δημιουργία Προϊόντος"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλογή"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Συστατικό"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Αγοράσιμο"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Πωλήσιμο"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλογή"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "Εικονικό"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Τα Προϊόντα είναι εικονικά από προεπιλογή"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Εμφάνιση σχετικών Προϊόντων"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Εμφάνιση σχετικών Προϊόντων για ένα Aντικειμένου"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Αρχικά δεδομένα αποθέματος"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "Να επιτρέπεται η δημιουργία αρχικού αποθέματος κατά την προσθήκη νέου Προϊόντος"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "Αρχικά δεδομένα προμηθευτή"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "Να επιτρέπεται η δημιουργία αρχικών δεδομένων προμηθευτή κατά την προσθήκη νέου Προϊόντος"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "Μορφή εμφάνισης ονόματος Προϊόντος"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Μορφή με την οποία εμφανίζεται το όνομα του Προϊόντος"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος (κενό σημαίνει χωρίς εικονίδιο)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "Ελάχιστα δεκαδικά ψηφία τιμολόγησης"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "Ελάχιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "Μέγιστα δεκαδικά ψηφία τιμολόγησης"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "Μέγιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "Χρήση τιμών προμηθευτή"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "Συμπερίληψη κλιμακωτών τιμών προμηθευτή στους συνολικούς υπολογισμούς τιμών"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "Υπέρβαση μέσω ιστορικού αγορών"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "Οι ιστορικές τιμές εντολών αγοράς υπερισχύουν των κλιμακωτών τιμών προμηθευτή"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "Χρήση τιμολόγησης στοιχείου αποθέματος"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "Χρήση τιμών από χειροκίνητα καταχωρημένα δεδομένα αποθέματος για τους υπολογισμούς τιμών"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "Ηλικία τιμολόγησης στοιχείου αποθέματος"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "Εξαίρεση στοιχείων αποθέματος παλαιότερων από αυτόν τον αριθμό ημερών από τους υπολογισμούς τιμών"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "Χρήση τιμολόγησης παραλλαγών"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "Συμπερίληψη τιμών παραλλαγών στους συνολικούς υπολογισμούς τιμών"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "Μόνο ενεργές παραλλαγές"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "Χρήση μόνο ενεργών Προϊόντων παραλλαγών για τον υπολογισμό τιμών παραλλαγών"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "Αυτόματη ενημέρωση τιμών"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "Αυτόματη ενημέρωση τιμών Προϊόντων όταν αλλάζουν τα εσωτερικά δεδομένα"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Διάστημα επαναυπολογισμού τιμών"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "Αριθμός ημερών πριν ενημερωθούν αυτόματα οι τιμές των Προϊόντων"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "Εσωτερικές τιμές"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Ενεργοποίηση εσωτερικών τιμών για Προϊόντα"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Υπέρβαση μέσω εσωτερικής τιμής"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "Όταν υπάρχουν, οι εσωτερικές τιμές υπερισχύουν των υπολογισμών εύρους τιμών"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Ενεργοποίηση εκτύπωσης ετικετών"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "Ενεργοποίηση εκτύπωσης ετικετών από το web interface"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "DPI εικόνας ετικέτας"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "Ανάλυση DPI κατά τη δημιουργία αρχείων εικόνας για πρόσθετα εκτύπωσης ετικετών"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "Ενεργοποίηση αναφορών"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Ενεργοποίηση δημιουργίας αναφορών"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Λειτουργία αποσφαλμάτωσης"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "Δημιουργία αναφορών σε λειτουργία αποσφαλμάτωσης (έξοδος HTML)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "Καταγραφή σφαλμάτων αναφορών"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "Μέγεθος σελίδας"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "Προεπιλεγμένο μέγεθος σελίδας για PDF αναφορές"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Επιβολή μονάδων παραμέτρων"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "Αν δοθούν μονάδες, οι τιμές των παραμέτρων πρέπει να αντιστοιχούν στις καθορισμένες μονάδες"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "Καθολικά μοναδικοί σειριακοί αριθμοί"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "Οι σειριακοί αριθμοί των στοιχείων αποθέματος πρέπει να είναι καθολικά μοναδικοί"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "Διαγραφή εξαντλημένου αποθέματος"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "Καθορίζει την προεπιλεγμένη συμπεριφορά όταν ένα στοιχείο αποθέματος εξαντλείται"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Πρότυπο κωδικού παρτίδας"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "Πρότυπο για τη δημιουργία προεπιλεγμένων κωδικών παρτίδας για στοιχεία αποθέματος"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "Λήξη αποθέματος"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Ενεργοποίηση λειτουργίας λήξης αποθέματος"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Πώληση ληγμένου αποθέματος"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Να επιτρέπεται η πώληση ληγμένου αποθέματος"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Χρόνος απαρχαίωσης αποθέματος"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "Αριθμός ημερών που τα στοιχεία αποθέματος θεωρούνται παλαιωμένα πριν λήξουν"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "Κατασκευή με ληγμένο απόθεμα"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Να επιτρέπεται η κατασκευή με ληγμένο απόθεμα"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Έλεγχος ιδιοκτησίας αποθέματος"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "Ενεργοποίηση ελέγχου ιδιοκτησίας σε τοποθεσίες και στοιχεία αποθέματος"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος (κενό σημαίνει χωρίς εικονίδιο)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος στους πίνακες αποθέματος"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "Έλεγχος BOM κατά την εγκατάσταση στοιχείων"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "Τα εγκατεστημένα στοιχεία αποθέματος πρέπει να υπάρχουν στο BOM του γονικού Προϊόντος"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "Να επιτρέπεται μεταφορά εκτός αποθέματος"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Πρότυπο αναφοράς εντολής κατασκευής"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "Πρέπει να οριστεί υπεύθυνος ιδιοκτήτης για κάθε παραγγελία"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "Απαίτηση ενεργού προϊόντος"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ανενεργά προϊόντα"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "Απαίτηση κλειδωμένου προϊόντος"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ξεκλείδωτα προϊόντα"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "Απαίτηση έγκυρης BOM"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "Αποτροπή δημιουργίας εντολής παραγωγής αν δεν έχει επικυρωθεί η BOM"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "Απαίτηση κλειστών θυγατρικών εντολών"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "Αποτροπή ολοκλήρωσης εντολής παραγωγής μέχρι να κλείσουν όλες οι θυγατρικές εντολές"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "Εξωτερικές εντολές παραγωγής"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Ενεργοποίηση λειτουργίας εξωτερικών εντολών παραγωγής"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Φραγή έως ότου περάσουν τα τεστ"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Αποτροπή ολοκλήρωσης εξόδων παραγωγής μέχρι να περάσουν όλα τα απαιτούμενα τεστ"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Ενεργοποίηση εντολών επιστροφής"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Ενεργοποίηση λειτουργίας εντολών επιστροφής στη διεπαφή χρήστη"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Μοτίβο αναφοράς εντολής επιστροφής"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής επιστροφής"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Επεξεργασία ολοκληρωμένων εντολών επιστροφής"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Επιτρέπει την επεξεργασία εντολών επιστροφής μετά την ολοκλήρωσή τους"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Μοτίβο αναφοράς εντολής πώλησης"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής πώλησης"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Προεπιλεγμένη αποστολή εντολής πώλησης"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Ενεργοποίηση δημιουργίας προεπιλεγμένης αποστολής με τις εντολές πώλησης"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Επεξεργασία ολοκληρωμένων εντολών πώλησης"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Επιτρέπει την επεξεργασία εντολών πώλησης μετά την αποστολή ή ολοκλήρωσή τους"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Η αποστολή απαιτεί έλεγχο"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Αποτροπή ολοκλήρωσης αποστολών μέχρι να ελεγχθούν τα είδη"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Σήμανση αποσταλμένων εντολών ως ολοκληρωμένων"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Οι εντολές πώλησης που επισημαίνονται ως αποσταλμένες ολοκληρώνονται αυτόματα, παρακάμπτοντας την κατάσταση «απεσταλμένο»"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Μοτίβο αναφοράς εντολής αγοράς"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής αγοράς"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "Επεξεργασία ολοκληρωμένων εντολών αγοράς"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "Επιτρέπει την επεξεργασία εντολών αγοράς μετά την αποστολή ή ολοκλήρωσή τους"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "Μετατροπή νομίσματος"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "Μετατροπή της αξίας είδους στο βασικό νόμισμα κατά την παραλαβή αποθέματος"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Αυτόματη ολοκλήρωση εντολών αγοράς"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "Αυτόματη σήμανση εντολών αγοράς ως ολοκληρωμένων όταν έχουν παραληφθεί όλα τα είδη"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "Ενεργοποίηση υπενθύμισης κωδικού"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "Ενεργοποίηση λειτουργίας υπενθύμισης κωδικού στις σελίδες σύνδεσης"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "Ενεργοποίηση εγγραφής"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "Ενεργοποίηση αυτοεγγραφής χρηστών στις σελίδες σύνδεσης"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "Ενεργοποίηση SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Ενεργοποίηση SSO στις σελίδες σύνδεσης"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Ενεργοποίηση εγγραφής μέσω SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "Ενεργοποίηση αυτοεγγραφής μέσω SSO στις σελίδες σύνδεσης"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "Ενεργοποίηση συγχρονισμού ομάδων SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "Ενεργοποίηση συγχρονισμού ομάδων InvenTree με ομάδες από τον IdP"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "Κλειδί ομάδας SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr "Το όνομα του πεδίου ομάδων που παρέχεται από τον IdP"
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr "Χάρτης ομάδων SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Αφαίρεση ομάδων εκτός SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Απαίτηση email"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "Απαίτηση συμπλήρωσης email κατά την εγγραφή"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "Αυτόματη συμπλήρωση χρηστών SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "Αυτόματη συμπλήρωση στοιχείων χρήστη από τα δεδομένα SSO"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "Email δύο φορές"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "Κατά την εγγραφή ζητείται το email δύο φορές"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "Κωδικός δύο φορές"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "Κατά την εγγραφή ζητείται ο κωδικός δύο φορές"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "Επιτρεπόμενοι τομείς"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "Περιορισμός εγγραφής σε συγκεκριμένους τομείς (χωρισμένοι με κόμμα, ξεκινούν με @)"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "Ομάδα κατά την εγγραφή"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Επιβολή MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Οι χρήστες πρέπει να χρησιμοποιούν πολυπαραγοντική ασφάλεια"
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Έλεγχος plugins κατά την εκκίνηση"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Έλεγχος για ενημερώσεις plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "Ενεργοποίηση περιοδικών ελέγχων για ενημερώσεις εγκατεστημένων plugins"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "Ενεργοποίηση URL integration"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Ενεργοποίηση προσθήκης URL routes από plugins"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Ενεργοποίηση ενσωμάτωσης στην πλοήγηση"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Ενεργοποίηση ενσωμάτωσης των plugins στην πλοήγηση"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Ενεργοποίηση ενσωμάτωσης εφαρμογών"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Ενεργοποίηση προσθήκης εφαρμογών από plugins"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Ενεργοποίηση ενσωμάτωσης χρονοπρογραμματισμού"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Ενεργοποίηση εκτέλεσης χρονοπρογραμματισμένων εργασιών από plugins"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Ενεργοποίηση ενσωμάτωσης γεγονότων"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "Ενεργοποίηση απόκρισης plugins σε εσωτερικά γεγονότα"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "Ενεργοποίηση ενσωμάτωσης διεπαφής"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "Ενεργοποίηση ενσωμάτωσης plugins στη διεπαφή χρήστη"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "Ενεργοποίηση ενσωμάτωσης email"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "Ενεργοποίηση επεξεργασίας εισερχόμενων/εξερχόμενων emails από plugins"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "Ενεργοποίηση κωδικών έργου"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "Ενεργοποίηση κωδικών έργου για την παρακολούθηση projects"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "Ενεργοποίηση καταγραφής ιστορικών επιπέδων και αξιών αποθέματος"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Εξαίρεση εξωτερικών τοποθεσιών"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Περίοδος αυτόματης απογραφής"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Εμφάνιση πλήρους ονόματος χρηστών"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "Εμφάνιση του πλήρους ονόματος των χρηστών αντί για το όνομα χρήστη"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "Εμφάνιση προφίλ χρηστών"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "Εμφάνιση προφίλ χρηστών στη σελίδα προφίλ τους"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Ενεργοποίηση δεδομένων σταθμού δοκιμών"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "Ενεργοποίηση συλλογής δεδομένων σταθμού δοκιμών για τα αποτελέσματα δοκιμών"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "Ενεργοποίηση ping μηχανημάτων"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "Ενεργοποίηση περιοδικού ping των καταχωρημένων μηχανημάτων για έλεγχο της κατάστασής τους"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Ανενεργό: Η πλήρης διαδρομή κατηγορίας εμφανίζεται ως tooltip κατά το πέρασμα του δείκτη. Ενεργό: Η πλήρης διαδρομή κατηγορίας εμφανίζεται ως απλό κείμενο"
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Λήψη αναφορών σφαλμάτων"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Λήψη ειδοποιήσεων για σφάλματα συστήματος"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Τελευταίες χρησιμοποιημένες εκτυπωτικές μηχανές"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Αποθήκευση των τελευταίων εκτυπωτικών μηχανών που χρησιμοποίησε ο χρήστης"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Δεν δόθηκε τύπος μοντέλου συνημμένου"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Μη έγκυρος τύπος μοντέλου συνημμένου"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Οι ελάχιστες θέσεις δεν μπορούν να είναι περισσότερες από τις μέγιστες"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Οι μέγιστες θέσεις δεν μπορούν να είναι λιγότερες από τις ελάχιστες"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Δεν επιτρέπεται κενός τομέας."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Μη έγκυρο όνομα τομέα: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Η τιμή πρέπει να είναι με κεφαλαία"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Η τιμή πρέπει να είναι έγκυρο όνομα μεταβλητής"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Κατασκευαστής"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Εταιρεία"
@@ -4050,8 +4193,8 @@ msgstr "Τηλέφωνο επικοινωνίας"
msgid "Contact email address"
msgstr "Email επικοινωνίας"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Επαφή"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Διεύθυνση"
@@ -4195,12 +4338,12 @@ msgstr "Σημειώσεις αποστολής για εσωτερική χρή
msgid "Link to address information (external)"
msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Βασικό προϊόν"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Κωδικός προϊόντος κατασκευαστή"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Προμηθευτής"
@@ -4254,7 +4397,7 @@ msgstr "Προμηθευτής"
msgid "Select supplier"
msgstr "Επιλογή προμηθευτή"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Κωδικός αποθέματος προμηθευτή"
@@ -4282,16 +4425,16 @@ msgstr "URL εξωτερικού συνδέσμου προϊόντος προμ
msgid "Supplier part description"
msgstr "Περιγραφή προϊόντος προμηθευτή"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "βασικό κόστος"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Συσκευασία"
@@ -4307,7 +4450,7 @@ msgstr "Ποσότητα ανά συσκευασία"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη."
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "πολλαπλάσιο"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr "Αρχικά δεδομένα γραμμής"
msgid "Errors"
msgstr "Σφάλματα"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Έγκυρο"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Άγνωστο"
@@ -4719,7 +4862,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 "Ομάδα"
@@ -4743,117 +4886,118 @@ msgstr "Μέγιστη πρόοδος"
msgid "Maximum value for progress type, required if type=progress"
msgstr "Μέγιστη τιμή για τύπο προόδου, απαιτείται αν type=progress"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Αναφορά παραγγελίας"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Σε εκκρεμότητα"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Έχει κωδικό έργου"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Δημιουργήθηκε από"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Δημιουργήθηκε πριν"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Δημιουργήθηκε μετά"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Έχει ημερομηνία έναρξης"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Ημερομηνία έναρξης πριν"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Ημερομηνία έναρξης μετά"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Έχει ημερομηνία στόχο"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Ημερομηνία στόχος πριν"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Ημερομηνία στόχος μετά"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Έχει τιμολόγηση"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Ολοκληρώθηκε πριν"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Ολοκληρώθηκε μετά"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Παραγγελία"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Η παραγγελία ολοκληρώθηκε"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Εσωτερικό προϊόν"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Η παραγγελία είναι σε εκκρεμότητα"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Ολοκληρώθηκε"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Έχει αποστολή"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr "Εντολή αγοράς"
msgid "Sales Order"
msgstr "Εντολές Πώλησης"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Εντολή επιστροφής"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Συνολική τιμή"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Συνολική τιμή για αυτή την παραγγελία"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Νόμισμα παραγγελίας"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε κενό για χρήση της προεπιλογής εταιρείας)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Αυτή η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Η επαφή δεν αντιστοιχεί στην επιλεγμένη εταιρεία"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Η ημερομηνία έναρξης πρέπει να είναι πριν από την ημερομηνία στόχο"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "Η διεύθυνση δεν αντιστοιχεί στην επιλεγμένη εταιρεία"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Περιγραφή παραγγελίας (προαιρετικά)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "Επιλογή κωδικού έργου για αυτή την παραγγελία"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Σύνδεσμος σε εξωτερική σελίδα"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Ημερομηνία έναρξης"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Επιθυμητή Προθεσμία"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Αναμενόμενη ημερομηνία παράδοσης παραγγελίας. Η παραγγελία θα θεωρείται εκπρόθεσμη μετά από αυτή την ημερομηνία."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Ημερομηνία έκδοσης"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Ημερομηνία έκδοσης της παραγγελίας"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την παραγγελία"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Σημείο επαφής για αυτή την παραγγελία"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Διεύθυνση εταιρείας για αυτή την παραγγελία"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Κατάσταση"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Κατάσταση εντολής αγοράς"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Εταιρεία από την οποία παραγγέλνονται τα είδη"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Αναφορά προμηθευτή"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Κωδικός αναφοράς παραγγελίας προμηθευτή"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "παραλήφθηκε από"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Ημερομηνία ολοκλήρωσης της παραγγελίας"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Προορισμός"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Προορισμός για τα παραληφθέντα είδη"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Ο προμηθευτής προϊόντος πρέπει να ταιριάζει με τον προμηθευτή της εντολής αγοράς"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή αγοράς"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Στη γραμμή λείπει συνδεδεμένο προϊόν"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Η ποσότητα πρέπει να είναι θετικός αριθμός"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "Πελάτης"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "Εταιρεία στην οποία πωλούνται τα είδη"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Κατάσταση εντολής πώλησης"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Αναφορά πελάτη "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Κωδικός αναφοράς παραγγελίας πελάτη"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Ημερομηνία αποστολής"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "απεστάλη από"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Η παραγγελία είναι ήδη ολοκληρωμένη"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Η παραγγελία είναι ήδη ακυρωμένη"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "Μόνο μια ανοικτή παραγγελία μπορεί να σημειωθεί ως ολοκληρωμένη"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες αποστολές"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες δεσμεύσεις αποθέματος"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες γραμμές"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "Η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Ποσότητα είδους"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Αναφορά γραμμής"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Σημειώσεις γραμμής"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Περιγραφή γραμμής (προαιρετικά)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Πρόσθετο πλαίσιο για αυτή τη γραμμή"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Τιμή μονάδας"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Γραμμή εντολής αγοράς"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Το προϊόν προμηθευτή πρέπει να ταιριάζει με τον προμηθευτή"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "Η εντολή παραγωγής πρέπει να έχει σημειωθεί ως εξωτερική"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "Οι εντολές παραγωγής μπορούν να συνδεθούν μόνο με προϊόντα συναρμολόγησης"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "Το προϊόν της εντολής παραγωγής πρέπει να ταιριάζει με το προϊόν της γραμμής"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Προϊόν προμηθευτή"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Παραλήφθηκε"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Αριθμός ειδών που παραλήφθηκαν"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Τιμή αγοράς"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Τιμή μονάδας αγοράς"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "Εξωτερική εντολή παραγωγής που θα καλυφθεί από αυτή τη γραμμή"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "Επιπλέον γραμμή εντολής αγοράς"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Γραμμή εντολής πώλησης"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "Μόνο πωλήσιμα προϊόντα μπορούν να αντιστοιχιστούν σε εντολή πώλησης"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "Τιμή πώλησης"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Τιμή μονάδας πώλησης"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Αποστάλθηκε"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Ποσότητα που αποστάλθηκε"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Αποστολή εντολής πώλησης"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "Η διεύθυνση αποστολής πρέπει να αντιστοιχεί στον πελάτη"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Διεύθυνση αποστολής για αυτή την αποστολή"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Ημερομηνία αποστολής"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Ημερομηνία παράδοσης"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Ημερομηνία παράδοσης της αποστολής"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Έλεγχος από"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Αποστολή"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Αριθμός αποστολής"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Αριθμός παρακολούθησης"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Πληροφορίες παρακολούθησης αποστολής"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Αριθμός τιμολογίου"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Αριθμός αναφοράς του σχετικού τιμολογίου"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Η αποστολή έχει ήδη σταλεί"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Η αποστολή δεν έχει δεσμευμένα είδη αποθέματος"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "Η αποστολή πρέπει να ελεγχθεί πριν μπορέσει να ολοκληρωθεί"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "Επιπλέον γραμμή εντολής πώλησης"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Δέσμευση αποθέματος εντολής πώλησης"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Δεν έχει αντιστοιχιστεί είδος αποθέματος"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "Δεν είναι δυνατή η δέσμευση είδους αποθέματος σε γραμμή με διαφορετικό προϊόν"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "Δεν είναι δυνατή η δέσμευση αποθέματος σε γραμμή χωρίς προϊόν"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερβαίνει την ποσότητα αποθέματος"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "Η εντολή πώλησης δεν αντιστοιχεί στην αποστολή"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "Η αποστολή δεν αντιστοιχεί στην εντολή πώλησης"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Γραμμή"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Αναφορά αποστολής εντολής πώλησης"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Είδος"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Επιλογή είδους αποθέματος προς δέσμευση"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Εισαγωγή ποσότητας δέσμευσης αποθέματος"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Αναφορά εντολής επιστροφής"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Εταιρεία από την οποία επιστρέφονται τα είδη"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Κατάσταση εντολής επιστροφής"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Γραμμή εντολής επιστροφής"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Πρέπει να καθοριστεί είδος αποθέματος"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Η ποσότητα επιστροφής υπερβαίνει την ποσότητα αποθέματος"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "Η ποσότητα επιστροφής πρέπει να είναι μεγαλύτερη από το μηδέν"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Μη έγκυρη ποσότητα για σειριοποιημένο είδος αποθέματος"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Επιλογή είδους προς επιστροφή από τον πελάτη"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Ημερομηνία παραλαβής"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Έκβαση"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Έκβαση για αυτή τη γραμμή"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "Κόστος που σχετίζεται με την επιστροφή ή επισκευή για αυτή τη γραμμή"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "Επιπλέον γραμμή εντολής επιστροφής"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID παραγγελίας"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID της παραγγελίας προς αντιγραφή"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Αντιγραφή γραμμών"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Αντιγραφή επιπλέον γραμμών"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Αντιγραφή παραμέτρων"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Γραμμές"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Ολοκληρωμένες γραμμές"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Αντιγραφή παραγγελίας"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Μη έγκυρο ID παραγγελίας"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Όνομα προμηθευτή"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Η παραγγελία δεν είναι ανοικτή"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Αυτόματη τιμολόγηση"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Νόμισμα τιμής αγοράς"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Συγχώνευση ειδών"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Εσωτερικός κωδικός προϊόντος"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Εσωτερική ονομασία προϊόντος"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Πρέπει να καθοριστεί εντολή αγοράς"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Γραμμή"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Ημερομηνία λήξης"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Barcode"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Σαρωμένο barcode"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Το barcode χρησιμοποιείται ήδη"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Πρέπει να δοθούν γραμμές"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Αποστολές"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Ολοκληρωμένες αποστολές"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Νόμισμα τιμής πώλησης"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Δεσμευμένα είδη"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Η ποσότητα πρέπει να είναι θετική"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Η αποστολή έχει ήδη σταλεί"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Γραμμή εντολής επιστροφής"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Η γραμμή έχει ήδη παραληφθεί"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "Ποσότητα προς επιστροφή"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Νόμισμα τιμής γραμμής"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Χάθηκε"
@@ -5661,6 +5879,11 @@ msgstr "Επιστροφή χρημάτων"
msgid "Reject"
msgstr "Απόρριψη"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Εκδόθηκε"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Εκπρόθεσμη εντολή αγοράς"
@@ -5696,7 +5919,7 @@ msgstr "Με αστέρι"
msgid "Filter by starred categories"
msgstr "Φιλτράρισμα κατά κατηγορίες με αστέρι"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Βάθος"
@@ -5704,7 +5927,7 @@ msgstr "Βάθος"
msgid "Filter by category depth"
msgstr "Φιλτράρισμα κατά βάθος κατηγορίας"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Ανώτατο επίπεδο"
@@ -5712,7 +5935,7 @@ msgstr "Ανώτατο επίπεδο"
msgid "Filter by top-level categories"
msgstr "Φιλτράρισμα κατά κατηγορίες ανώτατου επιπέδου"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Κατά κληρονομικότητα"
@@ -5732,75 +5955,79 @@ msgstr "Φιλτράρισμα κατά γονική κατηγορία"
msgid "Exclude sub-categories under the specified category"
msgstr "Εξαίρεση υποκατηγοριών κάτω από την καθορισμένη κατηγορία"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Έχει αποτελέσματα"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Είναι παραλλαγή"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Είναι αναθεώρηση"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Έχει αναθεωρήσεις"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Έγκυρο BOM"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Κατηγορίες κατά κληρονομικότητα"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Χρήσεις"
@@ -5809,11 +6036,11 @@ msgstr "Χρήσεις"
msgid "Part Category"
msgstr "Κατηγορία προϊόντος"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "Κατηγορίες προϊόντων"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "Προεπιλεγμένη τοποθεσία"
@@ -5821,7 +6048,7 @@ msgstr "Προεπιλεγμένη τοποθεσία"
msgid "Default location for parts in this category"
msgstr "Προεπιλεγμένη τοποθεσία για προϊόντα σε αυτή την κατηγορία"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Δομική"
@@ -5837,12 +6064,12 @@ msgstr "Προεπιλεγμένες λέξεις-κλειδιά"
msgid "Default keywords for parts in this category"
msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊόντα σε αυτή την κατηγορία"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Εικονίδιο"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Εικονίδιο (προαιρετικό)"
@@ -5862,984 +6089,1028 @@ msgstr "Προεπιλεγμένη τιμή"
msgid "Default Parameter Value"
msgstr "Προεπιλεγμένη τιμή παραμέτρου"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Πώληση πολλαπλάσιων"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Ελάχιστο κόστος BOM"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Μέγιστο κόστος BOM"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Μέγιστο κόστος προϊόντων Προϊόντων"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Ελάχιστο κόστος αγοράς"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Ελάχιστο ιστορικό κόστος αγοράς"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Μέγιστο κόστος αγοράς"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Μέγιστο ιστορικό κόστος αγοράς"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Ελάχιστη εσωτερική τιμή"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Μέγιστη εσωτερική τιμή"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Ελάχιστη τιμή προμηθευτή"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Μέγιστη τιμή προμηθευτή"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Ελάχιστο κόστος παραλλαγής"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Μέγιστο κόστος παραλλαγής"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Ελάχιστο κόστος"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Παράκαμψη ελάχιστου κόστους"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Μέγιστο κόστος"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Παράκαμψη μέγιστου κόστους"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Υπολογισμένο συνολικό μέγιστο κόστος"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Ελάχιστη τιμή πώλησης"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Μέγιστη τιμή πώλησης"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Ελάχιστο κόστος πώλησης"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Ελάχιστη ιστορική τιμή πώλησης"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Μέγιστο κόστος πώλησης"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Μέγιστη ιστορική τιμή πώλησης"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Προϊόν για απογραφή"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Αριθμός ειδών"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Ημερομηνία"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Ελάχιστο κόστος αποθέματος"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Μέγιστο κόστος αποθέματος"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Κλιμακωτή τιμή πώλησης προϊόντος"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Πρότυπο δοκιμής προϊόντος"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Όνομα δοκιμής"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Εισαγάγετε όνομα για τη δοκιμή"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Κλειδί δοκιμής"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Απλοποιημένο κλειδί για τη δοκιμή"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Περιγραφή δοκιμής"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Είναι αυτή η δοκιμή ενεργή;"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Απαραίτητη"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Απαιτεί τιμή"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Απαιτεί συνημμένο"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Επιλέξτε γονικό προϊόν"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Υποπροϊόν"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Ποσότητα ρύθμισης"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Φθορά"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Πολλαπλάσιο στρογγυλοποίησης"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Αναφορά στοιχείου BOM"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Σημειώσεις στοιχείου BOM"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Άθροισμα ελέγχου"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Άθροισμα ελέγχου γραμμής BOM"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Επικυρωμένο"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Κληρονομείται"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Πρέπει να καθοριστεί υποπροϊόν"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Εναλλακτικό στοιχείο BOM"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Γονικό στοιχείο BOM"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Εναλλακτικό προϊόν"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Προϊόν 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Προϊόν 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Επιλέξτε σχετικό προϊόν"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Σημείωση για αυτή τη σχέση"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Υπάρχει ήδη διπλή σχέση"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Γονική κατηγορία"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Γονική κατηγορία προϊόντος"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Υποκατηγορίες"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Αποτελέσματα"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Το αρχείο δεν είναι εικόνα"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Αρχικό προϊόν"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Αντιγραφή εικόνας"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Αντιγραφή BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Αντιγραφή σημειώσεων"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Αντιγραφή δοκιμών"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Αρχική ποσότητα αποθέματος"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα"
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Αρχική τοποθεσία αποθέματος"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Κωδικός προϊόντος κατασκευαστή"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Όνομα κατηγορίας"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Σε παραγωγή"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Είδη αποθέματος"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Αναθεωρήσεις"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Μη δεσμευμένο απόθεμα"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Απόθεμα παραλλαγών"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Αντιγραφή προϊόντος"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Αρχικό απόθεμα"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Πληροφορίες προμηθευτή"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Αντιγραφή παραμέτρων κατηγορίας"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Υπάρχουσα εικόνα"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Το αρχείο εικόνας δεν υπάρχει"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Μπορεί να παραχθεί"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Απαιτείται για εντολές παραγωγής"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Δεσμευμένο σε εντολές παραγωγής"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Απαιτείται για εντολές πώλησης"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Δεσμευμένο σε εντολές πώλησης"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Ελάχιστη τιμή"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Νόμισμα ελάχιστης τιμής"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Μέγιστη τιμή"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Νόμισμα μέγιστης τιμής"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Ενημέρωση"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Επιλέξτε τη γονική συναρμολόγηση"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Επιλέξτε το προϊόν Προϊόντος"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Αφαίρεση υπαρχόντων δεδομένων"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Συμπερίληψη κληρονομημένων"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "Παράλειψη μη έγκυρων γραμμών"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "Αντιγραφή εναλλακτικών προϊόντων"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM"
@@ -7091,15 +7362,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 "Δεν δόθηκαν είδη για εκτύπωση"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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 "Οριζόντιος προσανατολισμός"
@@ -7762,7 +8033,7 @@ msgstr "Πρόσθετο πακέτου"
msgid "Plugin"
msgstr "Πρόσθετο"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Δεν βρέθηκε δημιουργός"
@@ -8021,7 +8292,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 "Δεν δόθηκαν έγκυρα είδη στο πρότυπο"
@@ -8065,112 +8336,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 "Περιγραφή αρχείου πόρου"
@@ -8225,13 +8496,10 @@ msgstr "Απαιτούμενα υλικά"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Εικόνα προϊόντος"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Εκδόθηκε"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Απαιτείται για"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Σειριακός αριθμός"
@@ -8292,7 +8560,7 @@ msgstr "Αναφορά δοκιμών είδους αποθέματος"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Εγκατεστημένα είδη"
@@ -8325,6 +8593,10 @@ msgstr "Χωρίς αποτέλεσμα (υποχρεωτικό)"
msgid "No result"
msgstr "Χωρίς αποτέλεσμα"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "Το tag part_image απαιτεί μία παρουσία Aντικει
msgid "company_image tag requires a Company instance"
msgstr "Το tag company_image απαιτεί ένα Aντικειμένου Company"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Φιλτράρισμα ανά βάθος τοποθεσίας"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Φιλτράρισμα κατά τοποθεσίες ανώτατου επιπέδου"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Συμπερίληψη υποτοποθεσιών στα φιλτραρισμένα αποτελέσματα"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Γονική τοποθεσία"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Φιλτράρισμα βάσει γονικής τοποθεσίας"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Όνομα προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Το όνομα προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Όνομα προϊόντος (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "IPN προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Το IPN προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "IPN προϊόντος (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Ελάχιστο απόθεμα"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Μέγιστο απόθεμα"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Κωδικός κατάστασης"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Εξωτερική τοποθεσία"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Αναλωμένο από εντολή παραγωγής"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Εγκατεστημένο σε άλλο είδος αποθέματος"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Δέντρο προϊόντος"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Ενημερώθηκε πριν από"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Ενημερώθηκε μετά από"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Απογραφή πριν από"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Απογραφή μετά από"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Ημερομηνία λήξης πριν από"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Ημερομηνία λήξης μετά από"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Παλαιωμένο"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Δώστε ένα PK είδους αποθέματος για να εξαιρεθεί αυτό και όλοι οι απόγονοί του"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Διαδοχικές τοποθεσίες"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Αν είναι true, περιλαμβάνει είδη σε θυγατρικές τοποθεσίες της δεδομένης τοποθεσίας"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Φιλτράρισμα κατά αριθμητικό ID τοποθεσίας ή τη λέξη 'null'"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Απαιτείται ποσότητα"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Πρέπει να δοθεί έγκυρο προϊόν"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Το δοθέν προϊόν προμηθευτή δεν υπάρχει"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Το προϊόν προμηθευτή έχει ορισμένο μέγεθος συσκευασίας, αλλά η σημαία use_pack_size δεν έχει τεθεί"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Δεν μπορούν να δοθούν σειριακοί αριθμοί για μη ιχνηλάσιμο προϊόν"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Συμπερίληψη εγκατεστημένων"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Αν είναι true, περιλαμβάνει αποτελέσματα δοκιμών για είδη που είναι εγκατεστημένα κάτω από το συγκεκριμένο είδος αποθέματος"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Φιλτράρισμα κατά αριθμητικό ID είδους αποθέματος"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "Είδος αποθέματος με ID {id} δεν υπάρχει"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Τύπος τοποθεσίας αποθέματος"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Τύποι τοποθεσίας αποθέματος"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "Προεπιλεγμένο εικονίδιο για όλες τις τοποθεσίες που δεν έχουν ορισμένο εικονίδιο (προαιρετικό)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Τοποθεσία αποθέματος"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Τοποθεσίες αποθέματος"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Ιδιοκτήτης"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Επιλέξτε ιδιοκτήτη"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Εξωτερικό"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Πρόκειται για εξωτερική τοποθεσία αποθέματος"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Τύπος τοποθεσίας"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Ο τύπος τοποθεσίας αποθέματος για αυτή την τοποθεσία"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "Το {field} δεν υπάρχει"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Πρέπει να καθοριστεί προϊόν"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "Η ποσότητα πρέπει να είναι 1 για είδος με σειριακό αριθμό"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "Δεν μπορεί να οριστεί σειριακός αριθμός αν η ποσότητα είναι μεγαλύτερη από 1"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "Το είδος δεν μπορεί να ανήκει στον εαυτό του"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "Το είδος πρέπει να έχει αναφορά παραγωγής αν is_building=True"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "Η αναφορά παραγωγής δεν αντιστοιχεί στο ίδιο προϊόν"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "Γονικό είδος αποθέματος"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Βασικό προϊόν"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή για αυτό το είδος αποθέματος"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Εγκατεστημένο σε"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλλο είδος;"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Σειριακός αριθμός για αυτό το είδος"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Ποσότητα αποθέματος"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Πηγή παραγωγής"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Εντολή παραγωγής για αυτό το είδος αποθέματος"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Έχει αναλωθεί από"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Εντολή παραγωγής που κατανάλωσε αυτό το είδος αποθέματος"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Πηγή εντολής αγοράς"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Εντολή αγοράς για αυτό το είδος αποθέματος"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Εντολή πώλησης προορισμού"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "Ημερομηνία λήξης για το είδος αποθέματος. Το απόθεμα θα θεωρείται ληγμένο μετά από αυτή την ημερομηνία"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "Διαγραφή κατά την εξάντληση"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "Διαγραφή αυτού του είδους αποθέματος όταν εξαντληθεί"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Τιμή αγοράς ανά μονάδα κατά τον χρόνο αγοράς"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Μετατράπηκε σε προϊόν"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Η ποσότητα υπερβαίνει το διαθέσιμο απόθεμα"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Το προϊόν δεν έχει οριστεί ως ιχνηλάσιμο"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Η ποσότητα πρέπει να είναι ακέραιος αριθμός"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({self.quantity})"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "Οι σειριακοί αριθμοί πρέπει να δοθούν ως λίστα"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Η ποσότητα δεν αντιστοιχεί στους σειριακούς αριθμούς"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Το πρότυπο δοκιμής δεν υπάρχει"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε εντολή πώλησης"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "Το είδος αποθέματος είναι εγκατεστημένο σε άλλο είδος"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Το είδος αποθέματος περιέχει άλλα είδη"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε πελάτη"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Το είδος αποθέματος βρίσκεται αυτή τη στιγμή σε παραγωγή"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Διπλότυπα είδη αποθέματος"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν προμηθευτή"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "Οι κωδικοί κατάστασης αποθέματος πρέπει να ταιριάζουν"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "Το StockItem δεν μπορεί να μετακινηθεί καθώς δεν βρίσκεται σε απόθεμα"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "Ιχνηλάτηση είδους αποθέματος"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Σημειώσεις καταχώρησης"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Αποτέλεσμα δοκιμής είδους αποθέματος"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Πρέπει να δοθεί τιμή για αυτή τη δοκιμή"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Πρέπει να μεταφορτωθεί συνημμένο για αυτή τη δοκιμή"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "Μη έγκυρη τιμή για αυτή τη δοκιμή"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Αποτέλεσμα δοκιμής"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Τιμή αποτελέσματος δοκιμής"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Συνημμένο αποτελέσματος δοκιμής"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Σημειώσεις δοκιμής"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Σταθμός δοκιμής"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "Ο αναγνωριστικός κωδικός του σταθμού δοκιμής όπου πραγματοποιήθηκε η δοκιμή"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "Έναρξη"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Χρονική σήμανση έναρξης της δοκιμής"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Ολοκλήρωση"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Χρονική σήμανση λήξης της δοκιμής"
@@ -8913,214 +9193,234 @@ msgstr "Χρήση μεγέθους συσκευασίας κατά την πρ
msgid "Use pack size"
msgstr "Χρήση μεγέθους συσκευασίας"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα είδη"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Κωδικός προϊόντος προμηθευτή"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Ληγμένο"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Θυγατρικά είδη"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Εγγραφές ιχνηλάτησης"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Τιμή αγοράς αυτού του είδους αποθέματος, ανά μονάδα ή συσκευασία"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Εισαγάγετε τον αριθμό ειδών αποθέματος για σειριοποίηση"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "Δεν δόθηκε είδος αποθέματος"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Τοποθεσία προορισμού αποθέματος"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Δεν μπορούν να εκχωρηθούν σειριακοί αριθμοί σε αυτό το προϊόν"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Οι σειριακοί αριθμοί υπάρχουν ήδη"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Επιλέξτε είδος αποθέματος προς εγκατάσταση"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Ποσότητα προς εγκατάσταση"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Εισαγάγετε την ποσότητα των ειδών προς εγκατάσταση"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Προσθέστε σημείωση συναλλαγής (προαιρετικά)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Η ποσότητα προς εγκατάσταση πρέπει να είναι τουλάχιστον 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Το είδος αποθέματος δεν είναι διαθέσιμο"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Το επιλεγμένο προϊόν δεν βρίσκεται στο Δελτίο Υλικών (BOM)"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Η ποσότητα προς εγκατάσταση δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Τοποθεσία προορισμού για το απεγκατεστημένο είδος"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Επιλέξτε προϊόν στο οποίο θα μετατραπεί το είδος αποθέματος"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Το επιλεγμένο προϊόν δεν είναι έγκυρη επιλογή για μετατροπή"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Δεν είναι δυνατή η μετατροπή είδους αποθέματος με εκχωρημένο SupplierPart"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Κωδικός κατάστασης είδους αποθέματος"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Επιλέξτε είδη αποθέματος για αλλαγή κατάστασης"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Δεν επιλέχθηκαν είδη αποθέματος"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Υποτοποθεσίες"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Γονική τοποθεσία αποθέματος"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Το προϊόν πρέπει να είναι διαθέσιμο για πώληση"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Το είδος έχει δεσμευτεί σε εντολή πώλησης"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Το είδος έχει δεσμευτεί σε εντολή παραγωγής"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Πελάτης στον οποίο θα αποδοθούν τα είδη αποθέματος"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Η επιλεγμένη εταιρεία δεν είναι πελάτης"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Σημειώσεις απόδοσης αποθέματος"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Πρέπει να δοθεί λίστα ειδών αποθέματος"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Σημειώσεις συγχώνευσης αποθέματος"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Να επιτρέπονται διαφορετικοί προμηθευτές"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικά προϊόντα προμηθευτή"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Να επιτρέπεται διαφορετική κατάσταση"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικούς κωδικούς κατάστασης"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Πρέπει να δοθούν τουλάχιστον δύο είδη αποθέματος"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Καμία αλλαγή"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Τιμή πρωτεύοντος κλειδιού StockItem"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Το είδος δεν βρίσκεται σε απόθεμα"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Το είδος βρίσκεται ήδη σε απόθεμα"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Σημειώσεις συναλλαγής αποθέματος"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Συγχώνευση με υπάρχον απόθεμα"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Επόμενος σειριακός αριθμός"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Προηγούμενος σειριακός αριθμός"
@@ -9458,150 +9758,158 @@ 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 "Κύρια ομάδα του χρήστη"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Διαχειριστής"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Εντολές Αγοράς"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Εντολές Πώλησης"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Εντολές Επιστροφής"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Όνομα χρήστη"
diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po
index d1e37c9d76..f2930c64d3 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-04-21 02:25+0000\n"
+"POT-Creation-Date: 2026-05-24 13:00+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -89,7 +89,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr ""
@@ -105,13 +106,13 @@ msgstr ""
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr ""
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +538,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: report/templates/report/inventree_bill_of_materials_report.html:110
#: report/templates/report/inventree_bill_of_materials_report.html:137
#: report/templates/report/inventree_build_order_report.html:109
@@ -585,9 +572,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -596,9 +584,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -606,7 +594,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -654,374 +642,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1033,451 +1012,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1486,52 +1468,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1555,794 +1554,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2364,7 +2404,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:609
msgid "Items Received"
msgstr ""
@@ -2452,25 +2492,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2602,13 +2642,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2621,1030 +2661,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3929,55 +4047,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4005,13 +4148,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4051,8 +4194,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4104,7 +4247,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4196,12 +4339,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4214,12 +4357,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4243,11 +4386,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4255,7 +4398,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4283,16 +4426,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4308,7 +4451,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4332,23 +4475,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:881 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 ""
@@ -4504,7 +4647,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4616,7 +4759,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:2367
msgid "Unknown"
msgstr ""
@@ -4720,7 +4863,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 ""
@@ -4744,117 +4887,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4862,774 +5006,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5662,6 +5880,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5697,7 +5920,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5705,7 +5928,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5713,7 +5936,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5733,75 +5956,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5810,11 +6037,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5822,7 +6049,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5838,12 +6065,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5863,984 +6090,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7092,15 +7363,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 ""
@@ -7161,7 +7432,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
@@ -7507,20 +7778,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 ""
@@ -7561,7 +7832,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 ""
@@ -7763,7 +8034,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8022,7 +8293,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 ""
@@ -8066,112 +8337,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 ""
@@ -8226,13 +8497,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8268,7 +8536,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8293,7 +8561,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8326,6 +8594,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8354,491 +8626,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8914,214 +9194,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9459,150 +9759,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po
index 1d10f99a91..4f93f26f3a 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\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"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "No se pudo convertir {original} a {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Cantidad proporcionada no válida"
@@ -104,13 +105,13 @@ msgstr "Ingrese la fecha"
msgid "Invalid decimal value"
msgstr "Número decimal no válido"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notas"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descripción"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descripción (opcional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Moneda"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Estado del pedido"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Construcción o Armado Superior"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Incluye Variantes"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Incluye Variantes"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Incluye Variantes"
msgid "Part"
msgstr "Parte"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categoría"
@@ -605,7 +593,7 @@ msgstr "Categoría"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Asignado a mí"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Fecha Mínima"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Fecha Máxima"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Excluir Árbol"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "La compilación debe cancelarse antes de poder ser eliminada"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumible"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montaje"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Rastreado"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Comprobable"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Pedido pendiente"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Asignadas"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Agotado"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "En pedido"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Construir órden"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Ubicación"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Salida"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Construir órdenes"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "BOM de ensamblado no ha sido validado"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "La orden de construcción no puede ser creado para una parte inactiva"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "La orden de construcción no puede ser creada para una parte desbloqueada"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Se debe especificar un usuario o grupo responsable"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "La parte del pedido de construcción no puede ser modificada"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "La fecha límite debe ser posterior a la fecha de inicio"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Número de orden de construcción o armado"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referencia"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Breve descripción de la construcción (opcional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Seleccionar parte a construir o armar"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referencia de orden de venta"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Ubicación de la fuente"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Ubicación de destino"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Seleccione la ubicación donde se almacenarán los artículos completados"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Cantidad a crear"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Número de objetos existentes a construir"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Elementos completados"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Número de productos en stock que se han completado"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Estado de la construcción"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Código de estado de construcción"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Numero de lote"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Fecha de Creación"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Crear fecha de inicio"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Fecha de inicio programada para este pedido"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Fecha límite de finalización"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Fecha de finalización"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "terminado por"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Emitido por"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "El usuario que emitió esta orden"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsable"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Usuario o grupo responsable de esta orden de construcción"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link externo"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Enlace a URL externa"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioridad de construcción"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioridad de esta orden de construcción"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Código del proyecto"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Código de proyecto para esta orden de ensamble"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "El pedido {build} ha sido procesado"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Pedido #[order] ha sido procesado"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "No se ha especificado salida de construcción"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "La construcción de la salida ya está completa"
-#: build/models.py:1022
+#: build/models.py:960
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:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "La cantidad debe ser mayor que cero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Construir línea de pedido"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Ensamblar equipo"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Ensamblar equipo"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Cantidad"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Cantidad requerida para orden de ensamble"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "La cantidad debe ser 1 para el stock serializado"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Artículo de stock sobreasignado"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Artículo de stock"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Producto original de stock"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Cantidad de stock a asignar para construir"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalar en"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Artículo de stock de destino"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Nivel de construcción"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nombre de parte"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Resultado de la construcción o armado"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "La salida de construcción no coincide con la construcción padre"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "La parte de salida no coincide con la parte de la Orden de Construcción"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Esta salida de construcción ya ha sido completada"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Esta salida de construcción no está completamente asignada"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Ingrese la cantidad para la producción de la construcción"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Cantidad entera requerida para partes rastreables"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Números de serie"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Introduzca los números de serie de salidas de construcción"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Ubicación de stock para objetos construidos"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Autoasignar Números de Serie"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Los siguientes números seriales ya existen o son inválidos"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Debe proporcionarse una lista de salidas de construcción"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Ubicación de almacén para salidas descartadas"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Descartar asignaciones"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Descartar cualquier asignación de existencias para las salidas descartadas"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Razón para descartar la salida de ensamble(s)"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Ubicación para las salidas de construcción completadas"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Aceptar Asignación Incompleta"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Completar salidas si el inventario no se ha asignado completamente"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consumir Stock Asignado"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Eliminar salidas incompletas"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Eliminar cualquier salida de construcción que no se haya completado"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "No permitido"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Aceptar como consumido por este pedido de construcción"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Liberar antes de completar esta orden de construcción"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Stock sobreasignado"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Algunos artículos de inventario han sido sobreasignados"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Aceptar no asignado"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "El stock requerido no ha sido completamente asignado"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Aceptar incompleto"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Aceptar que el número requerido de salidas de construcción no se han completado"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "La cantidad de construcción requerida aún no se ha completado"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Orden de construcción debe estar en estado de producción"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "El orden de construcción tiene salidas incompletas"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linea de ensamble"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Resultado de la construcción o armado"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "La salida de la construcción debe apuntar a la misma construcción"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Crear partida"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "El artículo debe estar en stock"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Cantidad disponible ({q}) excedida"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Debe proporcionarse la adjudicación de artículos"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Excluir ubicación"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Excluir artículos de stock de esta ubicación seleccionada"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Stock intercambiable"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Sustituir stock"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Permitir la asignación de partes sustitutas"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Elementos opcionales"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Asignar artículos de la BOM opcionales para construir la orden"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Referencia BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID de la parte BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nombre de parte la BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Parte del proveedor"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Cantidad Asignada"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Referencia de orden de Ensamblado"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nombre de la categoría por pieza"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Rastreable"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Heredado"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Permitir variantes"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Item de Lista de Materiales"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "En producción"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Stock externo"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Stock Disponible"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Stock sustituto disponible"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Stock variable disponible"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Pendiente"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Producción"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "En espera"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Terminado"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "El pedido {build} ha sido procesado"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Pedido #[order] ha sido procesado"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Stock requerido para la orden de construcción"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Orden de construcción atrasada"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "El pedido de construcción {bo} está atrasado"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "¿Es enlace?"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "¿Es archivo?"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "El usuario no tiene permiso para eliminar estos adjuntos"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "El usuario no tiene permiso para eliminar este adjunto"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Actualizado"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Fecha y hora de la última actualización"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Código único del proyecto"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descripción del proyecto"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Tecla de ajustes"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valor de ajuste"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "El valor debe ser un valor booleano"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "El valor debe ser un entero"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "El valor debe ser un número válido"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "El valor no pasa las comprobaciones de validación"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Precio"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Precio unitario a la cantidad especificada"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Endpoint"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Está activo este webhook"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token para el acceso"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Clave"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Secreto compartido para HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID de mensaje"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identificador único para este mensaje"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Servidor"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Servidor desde el cual se recibió este mensaje"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Encabezado"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Encabezado del mensaje"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Cuerpo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Cuerpo de este mensaje"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Endpoint en el que se recibió este mensaje"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Trabajado en"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "¿El trabajo en este mensaje ha terminado?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Título"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Enlace"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publicado"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Resumen"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Leer"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "¿Esta noticia ya fue leída?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Archivo de imagen"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unidad personalizada"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "El símbolo de la unidad debe ser único"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nombre de unidad"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Símbolo"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Símbolo de unidad opcional"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definición"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definición de unidad"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Archivo adjunto"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Archivo no encontrado"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Falta enlace externo"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Seleccionar archivo para adjuntar"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Comentario"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Comentario de archivo adjunto"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Fecha de carga"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Fecha de carga del archivo"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Tamaño del archivo"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Tamaño del archivo en bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
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:2278
msgid "Custom State"
msgstr "Estado personalizado"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Estados personalizados"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Llave lógica"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valor"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiqueta"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Color"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Color que se mostrará en el frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modelo"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "El modelo debe ser seleccionado"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "La clave debe ser seleccionada"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "La clave lógica debe ser seleccionada"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Lista de selección"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Listas de Selección"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Nombre de la lista de selección"
-#: common/models.py:2259
+#: common/models.py:2435
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:2441 part/models.py:1297
msgid "Locked"
msgstr "Bloqueado"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "¿Está bloqueada esta lista de selección?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "¿Se puede utilizar esta lista de selección?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Complemento de origen"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Complemento que proporciona la lista de selección"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Cadena de origen"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Entrada por defecto"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Creado"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Última actualización"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Entrada de lista de selección"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Entradas de la lista de selección"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
msgid "Value of the selection list entry"
msgstr "Valor del elemento de la lista de selección"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Etiqueta para la entrada de lista de selección"
-#: common/models.py:2400
+#: common/models.py:2576
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:2583
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:2617
msgid "Parameter Template"
msgstr "Plantilla de parámetro"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
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:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Nombre de Parámetro"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unidades"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Casilla de verificación"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "¿Es este parámetro una casilla de verificación?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Opciones"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr "Lista de selección para este parámetro"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Habilitado"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Datos"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Nota"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Campo de nota opcional"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Escanear código de barras"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Datos de código de barras"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
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:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contexto"
-#: common/models.py:2878
+#: common/models.py:3054
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:3061
msgid "Response"
msgstr "Respuesta"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultado"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "¿El escaneo de código de barras fue exitoso?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Artículos Recibidos"
@@ -2451,25 +2491,25 @@ msgstr "Argumentos de palabra clave"
msgid "Task keyword arguments"
msgstr "Argumentos de palabra clave de tarea"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista de selección bloqueada"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "días"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Actualizar intervalo de actualización"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Copia de seguridad automática"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervalo de respaldo automático"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervalo de eliminación de tareas"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervalo de eliminación de registro de errores"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervalo de eliminación de notificaciones"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Soporte de código de barras"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Guardar resultados de código de barras"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
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:376
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:381
msgid "Barcode Input Delay"
msgstr "Retraso de entrada de código de barras"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Soporte para Webcam de código de barras"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Complemento para generar códigos de barra"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revisiones de partes"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Habilitar campo de revisión para parte"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "Regex IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Permitir IPN duplicado"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Permitir editar IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copiar parte de datos BOM"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Copiar parámetros de parte"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Copiar parte de datos de prueba"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copiar plantillas de parámetros de categoría"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Las partes son plantillas por defecto"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Componente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Comprable"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Vendible"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Las partes se pueden vender por defecto"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtual"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Las partes son virtuales por defecto"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Mostrar partes relacionadas"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Mostrar partes relacionadas para una parte"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Datos iniciales de existencias"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Datos iniciales del proveedor"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formato de visualización de Nombre de Parte"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Icono por defecto de la categoría de parte"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Mínimo de lugares decimales en el precio"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Máximo de lugares decimales en el precio"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Usar precios de proveedor"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Anulación del historial de compra"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Usar precio del artículo de almacén"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Edad del precio del artículo de almacén"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Usar precios variantes"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Solo variantes activas"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Intervalo de reconstrucción de precios"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Precios internos"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Habilitar precios internos para partes"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Anulación del precio interno"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Habilitar impresión de etiquetas"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "PPP de la imagen de etiqueta"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Habilitar informes"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Habilitar generación de informes"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Modo de depuración"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Registrar errores de reportes"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Forzar unidades de parámetro"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Seriales únicos globalmente"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Eliminar existencias agotadas"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Plantilla de código de lote"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Expiración de stock"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Habilitar la funcionalidad de expiración de stock"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vender existencias caducadas"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Permitir venta de existencias caducadas"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Tiempo histórico de Stock"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Crear Stock Caducado"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Permitir crear con stock caducado"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Control de Stock"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Icono por defecto de ubicación de almacén"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Mostrar Articulos de Stock Instalados"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "Permitir transferencia Sin Existencias"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Patrón de Referencia de Ordenes de Armado"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Requerir Parte Activa"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Requerir Parte Bloqueada"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Bloquear hasta que los Tests pasen"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Habilitar órdenes de devolución"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Patrón de referencia de orden de devolución"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Editar ordenes de devolución completadas"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Patrón de Referencia de Ordenes de Venta"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Patrón requerido para generar el campo de referencia de la orden de venta"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Envío Predeterminado de Ordenes de Venta"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Editar Ordenes de Venta Completados"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Marcar pedidos enviados como completados"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Patrón de Referencia de Orden de Compra"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Editar Ordenes de Compra Completados"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Convertir moneda"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Autocompletar Ordenes de compra"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Habilitar función de contraseña olvidada"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Habilitar registro"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Habilitar SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "Habilitar registro SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Habilitar sincronización de grupo SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "Clave de grupo SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Mapa del grupo SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Eliminar grupos fuera de SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email requerido"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Auto-rellenar usuarios SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Correo dos veces"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Contraseña dos veces"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Dominios permitidos"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupo al registrarse"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Forzar MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Los usuarios deben utilizar seguridad multifactor."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Comprobar complementos al iniciar"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Revisar actualizaciones del plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Habilitar integración de URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Habilitar integración de navegación"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "Habilitar integración de la aplicación"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Habilitar plugins para añadir aplicaciones"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Habilitar integración de programación"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Habilitar plugins para ejecutar tareas programadas"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Habilitar integración de eventos"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Habilitar integración de interfaz"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Excluir Ubicaciones Externas"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Periodo de inventario automático"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Mostrar nombres completos de los usuarios"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Habilitar datos de estación de prueba"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Recibir reportes de error"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Recibir notificación de errores del sistema"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Últimas impresoras usadas"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Un dominio vacío no está permitido."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nombre de dominio inválido: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabricante"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Empresa"
@@ -4050,8 +4193,8 @@ msgstr "Teléfono de contacto"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contacto"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Dirección"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Parte base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Número de parte de fabricante"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Proveedor"
@@ -4254,7 +4397,7 @@ msgstr "Proveedor"
msgid "Select supplier"
msgstr "Seleccionar proveedor"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Unidad de mantenimiento de stock de proveedores"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "costo base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Paquetes"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "múltiple"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Válido"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Desconocido"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Referencia del pedido"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Destacado"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Tiene Código de Proyecto"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Creado por"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Creado antes de"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Creado después de"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Tiene fecha inicial"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Fecha de inicio anterior"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Fecha de inicio después"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Tiene fecha límite"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Fecha objetivo antes"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Fecha objetivo después"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Tiene Precio"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Completado antes de"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Completado después de"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Orden"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Orden completada"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Componente interno"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Orden pendiente"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Completados"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Tiene envío"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Orden de devolución"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Precio Total"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Precio total para este pedido"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Moneda de pedido"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Este pedido está bloqueado y no puede ser modificado"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "El contacto no coincide con la empresa seleccionada"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "La fecha de inicio debe ser anterior a la fecha de límite"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descripción del pedido (opcional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Enlace a Url externa"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Fecha de inicio"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Fecha objetivo"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Fecha de emisión"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Fecha de expedición del pedido"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Usuario o grupo responsable de este pedido"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Punto de contacto para este pedido"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Estado"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Estado de la orden de compra"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Empresa de la cual se están encargando los artículos"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Referencia del proveedor"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Código de referencia de pedido del proveedor"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "recibido por"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "La fecha de pedido fue completada"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destinación"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Destino para los artículos recibidos"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "El proveedor de la parte debe coincidir con el proveedor de PO"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "La partida no coincide con la orden de compra"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "La cantidad debe ser un número positivo"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr "Estado de la orden de venta"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Referencia del cliente "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Fecha de envío"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "enviado por"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "La orden ya fue completada"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "La orden ya fue cancelada"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Cantidad del artículo"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Referencia de partida"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Notas de partida"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descripción de partida (opcional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contexto adicional para esta línea"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Precio unitario"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "La parte del proveedor debe coincidir con el proveedor"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Parte del proveedor"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Recibido"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Precio de Compra"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Precio de compra unitario"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Precio de Venta"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Precio de venta unitario"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Enviado"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Cantidad enviada"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Fecha del envío"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Fecha de entrega"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Fecha de entrega del envío"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Revisado por"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Envío"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Número de envío"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Número de Seguimiento"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Información de seguimiento del envío"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Número de factura"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Número de referencia para la factura asociada"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "El envío ya ha sido enviado"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "El artículo de stock no ha sido asignado"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Línea"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Ítem"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Seleccionar artículo de stock para asignar"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Especificar la cantidad de asignación de stock"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Referencia de la orden de devolución"
-#: order/models.py:2777
+#: order/models.py:2847
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:2860
msgid "Return order status"
msgstr "Estado de la orden de devolución"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Seleccionar el artículo a devolver del cliente"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Fecha de recepción"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Resultado"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Salida para esta partida"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID del Pedido"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID del pedido a duplicar"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Copiar líneas"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Copiar elementos de línea del pedido original"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Copiar líneas adicionales"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Copiar Parámetros"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Partidas"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Líneas completadas"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplicar pedido"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Especificar opciones para duplicar este pedido"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "ID de pedido no válido"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Nombre del proveedor"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "El pedido no puede ser cancelado"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "El pedido tiene partidas incompletas"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "El pedido no está abierto"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Precio automático"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Moneda del precio de compra"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Combinar artículos"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Número de parte interna"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Nombre interno de parte"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Debe especificar la parte del proveedor"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "La orden de compra debe especificarse"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "El proveedor debe coincidir con la orden de compra"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Partida"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
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:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Código de barras"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Código de barras escaneado"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Código de barras en uso"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Se deben proporcionar las partidas"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Se requiere ubicación de destino"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr "Envíos"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Envíos completados"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Moneda del precio de venta"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Elementos asignados"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "No se proporcionaron detalles de envío"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "La cantidad debe ser positiva"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
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:1824 order/serializers.py:1954
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:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
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:2127
msgid "Return order line item"
msgstr "Partida de orden de devolución"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "La partida ya ha sido recibida"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Cantidad a devolver"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Moneda de precio de línea"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perdida"
@@ -5661,6 +5879,11 @@ msgstr "Reembolso"
msgid "Reject"
msgstr "Rechazo"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Emitido"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Orden de compra atrasada"
@@ -5696,7 +5919,7 @@ msgstr "Favoritos"
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Profundidad"
@@ -5704,7 +5927,7 @@ msgstr "Profundidad"
msgid "Filter by category depth"
msgstr "Filtrar por profundidad de categoría"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Nivel superior"
@@ -5712,7 +5935,7 @@ msgstr "Nivel superior"
msgid "Filter by top-level categories"
msgstr "Filtrar por categorías de nivel superior"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "En cascada"
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Tiene resultados"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Categoría de parte"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Ubicación Predeterminada"
msgid "Default location for parts in this category"
msgstr "Ubicación predeterminada para partes de esta categoría"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Estructural"
@@ -5837,12 +6064,12 @@ msgstr "Palabras clave predeterminadas"
msgid "Default keywords for parts in this category"
msgstr "Palabras clave por defecto para partes en esta categoría"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Icono"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Icono (opcional)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Vender múltiples"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Moneda utilizada para almacenar en caché los cálculos de precios"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Costo mínimo de BOM"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Costo mínimo de partes de componentes"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Costo máximo de BOM"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Costo máximo de partes de componentes"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Costo mínimo de compra"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Costo histórico mínimo de compra"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Costo máximo de compra"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Costo histórico máximo de compra"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Precio interno mínimo"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Costo mínimo basado en precios reducidos internos"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Precio interno máximo"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Costo máximo basado en precios reducidos internos"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Precio mínimo de proveedor"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Precio mínimo de la parte de proveedores externos"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Precio máximo de proveedor"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Precio máximo de la parte de proveedores externos"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Costo mínimo de variante"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Costo mínimo calculado de las partes variantes"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Costo máximo de variante"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Costo máximo calculado de las partes variantes"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Costo mínimo"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Anular el costo mínimo"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Costo máximo"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Reemplazar coste máximo"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Costo mínimo general calculado"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Precio de venta mínimo"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Precio de venta mínimo basado en precios reducidos"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Precio de venta máximo"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Precio de venta máximo basado en precios reducidos"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Costo de venta mínimo"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Precio de venta mínimo histórico"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Costo de Venta Máximo"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Precio de venta máximo histórico"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Número de artículos"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Fecha"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Costo de Stock Mínimo"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Costo mínimo estimado del stock disponible"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nombre de prueba"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Introduzca un nombre para la prueba"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Descripción de prueba"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Introduce la descripción para esta prueba"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Requerido"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "¿Es necesario pasar esta prueba?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Requiere valor"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Adjunto obligatorio"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Seleccionar parte principal"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sub parte"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Seleccionar parte a utilizar en BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Cantidad del artículo en BOM"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Este artículo BOM es opcional"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Referencia de artículo de BOM"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Notas del artículo de BOM"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Suma de verificación"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Suma de verificación de línea de BOM"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Validado"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Este artículo de BOM ha sido validado"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr ""
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "La cantidad debe ser un valor entero para las partes rastreables"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Debe especificar la subparte"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Ítem de BOM sustituto"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Artículo BOM superior"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Sustituir parte"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Parte 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Parte 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Seleccionar parte relacionada"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Nota para esta relación"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Categoría principal de parte"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Subcategorías"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Moneda de compra de ítem de stock"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Parte original"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Seleccione la parte original a duplicar"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Copiar Imagen"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Copiar imagen desde la parte original"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copiar BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
msgid "Copy parameter data from original part"
msgstr "Copiar datos del parámetro de la parte original"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Copiar Notas"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Cantidad Inicial de Stock"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Seleccionar fabricante (o dejar en blanco para saltar)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Número de parte del fabricante"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Nombre de categoría"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "En construcción"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Elementos de stock"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Duplicar Parte"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Stock Inicial"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Crear Parte con cantidad inicial de stock"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Información del proveedor"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Copiar Parámetros de Categoría"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Imagen Existente"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "El archivo de imagen no existe"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Validación de Lista de Materiales"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Puede construir"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Precio mínimo"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Anular el valor calculado para precio mínimo"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Precio mínimo de moneda"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Precio máximo"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Precio máximo de moneda"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Actualizar"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Seleccionar parte de la que copiar BOM"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Eliminar Datos Existentes"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Eliminar artículos BOM existentes antes de copiar"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Incluye Heredado"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Omitir filas no válidas"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Copiar partes sustitutas"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Complemento"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "No se encontró autor"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Materiales necesarios"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Imagen de parte"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Emitido"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Requerido para"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Número de serie"
@@ -8292,7 +8560,7 @@ msgstr "Artículo Stock Informe de prueba"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Elementos instalados"
@@ -8325,6 +8593,10 @@ msgstr "Ningún resultado (requerido)"
msgid "No result"
msgstr "Sin resultados"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Ubicación principal"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtrar por ubicación principal"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "El nombre de la pieza (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Nombre de la pieza (expresión regular)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Pieza IPN (expresión regular)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Stock mínimo"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Stock máximo"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Código de estado"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Ubicación externa"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Instalado en otro artículo de existencias"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Árbol de piezas"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Actualizado antes"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Actualizado después"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Inventario antes"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Inventario después"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Desactualizado"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Cantidad requerida"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Debe suministrarse una parte válida"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Ubicación de Stock"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Ubicaciones de Stock"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Propietario"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Seleccionar Propietario"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Externo"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Se debe especificar la pieza"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "El objeto no puede pertenecer a sí mismo"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Artículo de stock padre"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Parte base"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Instalado en"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
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:1136 stock/serializers.py:1694
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:1141
msgid "Stock Quantity"
msgstr "Cantidad de Stock"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Build de origen"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Build para este item de stock"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Consumido por"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Orden de compra de origen"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Orden de compra para este artículo de stock"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Orden de venta de destino"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Eliminar al agotar"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Convertido a parte"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "La parte no está establecida como rastreable"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Cantidad debe ser un entero"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
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:1979
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:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "Artículo de stock contiene otros artículos"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "El artículo de stock está en producción"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Stock serializado no puede ser combinado"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Artículos de Stock Duplicados"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Los códigos de estado del stock deben coincidir"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Notas de entrada"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Debe proporcionarse un valor para esta prueba"
-#: stock/models.py:3030
+#: stock/models.py:3103
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:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Resultado de la prueba"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Valor de salida de prueba"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Adjunto de resultados de prueba"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Notas de prueba"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Finalizó"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Introduzca números de serie para nuevos artículos"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Número de pieza del proveedor"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Expirado"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Elementos secundarios"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Introduzca el número de artículos de stock para serializar"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Ubicación de stock de destino"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Los números de serie no se pueden asignar a esta parte"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Números de serie ya existen"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Añadir nota de transacción (opcional)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sub-ubicación"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "La parte debe ser vendible"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "El artículo está asignado a una orden de venta"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "El artículo está asignado a una orden de creación"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Cliente para asignar artículos de stock"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "La empresa seleccionada no es un cliente"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Notas de asignación de stock"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Debe proporcionarse una lista de artículos de stock"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notas de fusión de stock"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Permitir proveedores no coincidentes"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Permitir estado no coincidente"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Debe proporcionar al menos dos artículos de stock"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Sin cambios"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Valor de clave primaria de Stock"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "No hay existencias del artículo"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Notas de transacción de stock"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Ordenes de compra"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Órdenes de venta"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Ordenes de devolución"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nombre de usuario"
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 9be143b44f..941ef40006 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Spanish, Mexico\n"
"Language: es_MX\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "No se pudo convertir {original} a {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Cantidad proporcionada no válida"
@@ -104,13 +105,13 @@ msgstr "Ingrese la fecha"
msgid "Invalid decimal value"
msgstr "Número decimal inválido"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notas"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descripción"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descripción (opcional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Moneda"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Estado del pedido"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Construcción o Armado Superior"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Incluye Variantes"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Incluye Variantes"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Incluye Variantes"
msgid "Part"
msgstr "Parte"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categoría"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Asignado a mí"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "La compilación debe cancelarse antes de poder ser eliminada"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumible"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montaje"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Rastreado"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Comprobable"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Pedido pendiente"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Asignadas"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "En pedido"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Construir órden"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Ubicación"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Construir órdenes"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "BOM de ensamblado no ha sido validado"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "La orden de construcción no puede ser creado para una parte inactiva"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "La orden de construcción no puede ser creada para una parte desbloqueada"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Se debe especificar un usuario o grupo responsable"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "La parte del pedido de construcción no puede ser modificada"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Número de orden de construcción o armado"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referencia"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Breve descripción de la construcción (opcional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Seleccionar parte a construir o armar"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referencia de orden de venta"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Ubicación de la fuente"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Ubicación de destino"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Seleccione la ubicación donde se almacenarán los artículos completados"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Cantidad a crear"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Número de objetos existentes a construir"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Elementos completados"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Número de productos en stock que se han completado"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Estado de la construcción"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Código de estado de construcción"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Numero de lote"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Fecha de Creación"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Fecha límite de finalización"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Fecha de finalización"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "terminado por"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Emitido por"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "El usuario que emitió esta orden"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsable"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Usuario o grupo responsable de esta orden de construcción"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link externo"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Enlace a URL externa"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioridad de construcción"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioridad de esta orden de construcción"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Código del proyecto"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Código de proyecto para esta orden de ensamble"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "El pedido {build} ha sido procesado"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Pedido #[order] ha sido procesado"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "No se ha especificado salida de construcción"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "La construcción de la salida ya está completa"
-#: build/models.py:1022
+#: build/models.py:960
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:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "La cantidad debe ser mayor que cero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Construir línea de pedido"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Ensamblar equipo"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Ensamblar equipo"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Cantidad"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Cantidad requerida para orden de ensamble"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "La cantidad debe ser 1 para el stock serializado"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Artículo de stock sobreasignado"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Artículo de stock"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Producto original de stock"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Cantidad de stock a asignar para construir"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalar en"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Artículo de stock de destino"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Nivel de construcción"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nombre de parte"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Resultado de la construcción o armado"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "La salida de construcción no coincide con la construcción padre"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "La parte de salida no coincide con la parte de la Orden de Construcción"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Esta salida de construcción ya ha sido completada"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Esta salida de construcción no está completamente asignada"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Ingrese la cantidad para la producción de la construcción"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Cantidad entera requerida para partes rastreables"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Números de serie"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Introduzca los números de serie de salidas de construcción"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Ubicación de stock para objetos construidos"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Autoasignar Números de Serie"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Los siguientes números seriales ya existen o son inválidos"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Debe proporcionarse una lista de salidas de construcción"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Ubicación de almacén para salidas descartadas"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Descartar asignaciones"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Descartar cualquier asignación de existencias para las salidas descartadas"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Razón para descartar la salida de ensamble(s)"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Ubicación para las salidas de construcción completadas"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Aceptar Asignación Incompleta"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Completar salidas si el inventario no se ha asignado completamente"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consumir Stock Asignado"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Eliminar salidas incompletas"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Eliminar cualquier salida de construcción que no se haya completado"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "No permitido"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Aceptar como consumido por este pedido de construcción"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Liberar antes de completar esta orden de construcción"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Stock sobreasignado"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Algunos artículos de inventario han sido sobreasignados"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Aceptar no asignado"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "El stock requerido no ha sido completamente asignado"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Aceptar incompleto"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Aceptar que el número requerido de salidas de construcción no se han completado"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "La cantidad de construcción requerida aún no se ha completado"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Orden de construcción debe estar en estado de producción"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "El orden de construcción tiene salidas incompletas"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linea de ensamble"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Resultado de la construcción o armado"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "La salida de la construcción debe apuntar a la misma construcción"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Crear partida"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "El artículo debe estar en stock"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Cantidad disponible ({q}) excedida"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Debe proporcionarse la adjudicación de artículos"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Excluir ubicación"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Excluir artículos de stock de esta ubicación seleccionada"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Stock intercambiable"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Sustituir stock"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Permitir la asignación de partes sustitutas"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Elementos opcionales"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Asignar artículos de la BOM opcionales para construir la orden"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Referencia BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID de la parte BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nombre de parte la BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Parte del proveedor"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Cantidad Asignada"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Referencia de orden de Ensamblado"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nombre de la categoría por pieza"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Rastreable"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Heredado"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Permitir variantes"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Item de Lista de Materiales"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "En producción"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Stock externo"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Stock Disponible"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Stock sustituto disponible"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Stock variable disponible"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Pendiente"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Producción"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "En espera"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Terminado"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "El pedido {build} ha sido procesado"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Pedido #[order] ha sido procesado"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Stock requerido para la orden de construcción"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Orden de construcción atrasada"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "El pedido de construcción {bo} está atrasado"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "¿Es enlace?"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "¿Es archivo?"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "El usuario no tiene permiso para eliminar estos adjuntos"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "El usuario no tiene permiso para eliminar este adjunto"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Actualizado"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Fecha y hora de la última actualización"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Código único del proyecto"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descripción del proyecto"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Tecla de ajustes"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valor de ajuste"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "El valor debe ser un valor booleano"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "El valor debe ser un entero"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "El valor debe ser un número válido"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "El valor no pasa las comprobaciones de validación"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Precio"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Precio unitario a la cantidad especificada"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Endpoint"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Está activo este webhook"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token para el acceso"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Clave"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Secreto compartido para HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID de mensaje"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identificador único para este mensaje"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Servidor desde el cual se recibió este mensaje"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Encabezado"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Encabezado del mensaje"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Cuerpo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Cuerpo de este mensaje"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Endpoint en el que se recibió este mensaje"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Trabajado en"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "¿El trabajo en este mensaje ha terminado?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Título"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Enlace"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publicado"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Resumen"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Leer"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "¿Esta noticia ya fue leída?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Archivo de imagen"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Tipo de modelo destino para esta imagen"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unidad personalizada"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "El símbolo de la unidad debe ser único"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nombre de unidad"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Símbolo"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Símbolo de unidad opcional"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definición"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definición de unidad"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Archivo adjunto"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Archivo no encontrado"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Falta enlace externo"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Seleccionar archivo para adjuntar"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Comentario"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Comentario de archivo adjunto"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Fecha de carga"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Fecha de carga del archivo"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Tamaño del archivo"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Tamaño del archivo en bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
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:2278
msgid "Custom State"
msgstr "Estado personalizado"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Estados personalizados"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Conjunto de estado de referencia"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Llave lógica"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valor"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiqueta"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Color"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Color que se mostrará en el frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modelo"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Modelo con el que este estado está asociado"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "El modelo debe ser seleccionado"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "La clave debe ser seleccionada"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "La clave lógica debe ser seleccionada"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
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:2368
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:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Lista de selección"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Listas de Selección"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Nombre de la lista de selección"
-#: common/models.py:2259
+#: common/models.py:2435
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:2441 part/models.py:1297
msgid "Locked"
msgstr "Bloqueado"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "¿Está bloqueada esta lista de selección?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "¿Se puede utilizar esta lista de selección?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Complemento de origen"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Complemento que proporciona la lista de selección"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Cadena de origen"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Entrada por defecto"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Creado"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Última actualización"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Entrada de lista de selección"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Entradas de la lista de selección"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
msgid "Value of the selection list entry"
msgstr "Valor del elemento de la lista de selección"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Etiqueta para la entrada de lista de selección"
-#: common/models.py:2400
+#: common/models.py:2576
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:2583
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:2617
msgid "Parameter Template"
msgstr "Plantilla de parámetro"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
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:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Nombre de Parámetro"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unidades"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Casilla de verificación"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "¿Es este parámetro una casilla de verificación?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Opciones"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr "Lista de selección para este parámetro"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Habilitado"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Datos"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Nota"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Campo de nota opcional"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Escanear código de barras"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Datos de código de barras"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
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:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contexto"
-#: common/models.py:2878
+#: common/models.py:3054
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:3061
msgid "Response"
msgstr "Respuesta"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultado"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "¿El escaneo de código de barras fue exitoso?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Artículos Recibidos"
@@ -2451,25 +2491,25 @@ msgstr "Argumentos de palabra clave"
msgid "Task keyword arguments"
msgstr "Argumentos de palabra clave de tarea"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista de selección bloqueada"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "días"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Actualizar intervalo de actualización"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Copia de seguridad automática"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervalo de respaldo automático"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervalo de eliminación de tareas"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervalo de eliminación de registro de errores"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervalo de eliminación de notificaciones"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Soporte de código de barras"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Guardar resultados de código de barras"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
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:376
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:381
msgid "Barcode Input Delay"
msgstr "Retraso de entrada de código de barras"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Soporte para Webcam de código de barras"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Complemento para generar códigos de barra"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revisiones de partes"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Habilitar campo de revisión para parte"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "Regex IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Permitir IPN duplicado"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Permitir editar IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copiar parte de datos BOM"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Copiar parámetros de parte"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Copiar parte de datos de prueba"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copiar plantillas de parámetros de categoría"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Las partes son plantillas por defecto"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Componente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Comprable"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Vendible"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Las partes se pueden vender por defecto"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtual"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Las partes son virtuales por defecto"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Mostrar partes relacionadas"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Mostrar partes relacionadas para una parte"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Datos iniciales de existencias"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Datos iniciales del proveedor"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formato de visualización de Nombre de Parte"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Icono por defecto de la categoría de parte"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Mínimo de lugares decimales en el precio"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Máximo de lugares decimales en el precio"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Usar precios de proveedor"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Anulación del historial de compra"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Usar precio del artículo de almacén"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Edad del precio del artículo de almacén"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Usar precios variantes"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Solo variantes activas"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Intervalo de reconstrucción de precios"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Precios internos"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Habilitar precios internos para partes"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Anulación del precio interno"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Habilitar impresión de etiquetas"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "PPP de la imagen de etiqueta"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Habilitar informes"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Habilitar generación de informes"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Modo de depuración"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Registrar errores de reportes"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Forzar unidades de parámetro"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Seriales únicos globalmente"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Eliminar existencias agotadas"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Plantilla de código de lote"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Expiración de stock"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Habilitar la funcionalidad de expiración de stock"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vender existencias caducadas"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Permitir venta de existencias caducadas"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Tiempo histórico de Stock"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Crear Stock Caducado"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Permitir crear con stock caducado"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Control de Stock"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Icono por defecto de ubicación de almacén"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Mostrar Articulos de Stock Instalados"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Revisar BOM al instalar artículos"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Permitir transferencia Sin Existencias"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Patrón de Referencia de Ordenes de Armado"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Requerir Parte Activa"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Requerir Parte Bloqueada"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Bloquear hasta que los Tests pasen"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Habilitar órdenes de devolución"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Patrón de referencia de orden de devolución"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Editar ordenes de devolución completadas"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Patrón de Referencia de Ordenes de Venta"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Patrón requerido para generar el campo de referencia de la orden de venta"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Envío Predeterminado de Ordenes de Venta"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Editar Ordenes de Venta Completados"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Marcar pedidos enviados como completados"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Patrón de Referencia de Orden de Compra"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Editar Ordenes de Compra Completados"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Autocompletar Ordenes de compra"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Habilitar función de contraseña olvidada"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Habilitar registro"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Habilitar SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "Habilitar registro SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Habilitar sincronización de grupo SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "Clave de grupo SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Mapa del grupo SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Eliminar grupos fuera de SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email requerido"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Auto-rellenar usuarios SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Correo dos veces"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Contraseña dos veces"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Dominios permitidos"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupo al registrarse"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Forzar MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Los usuarios deben utilizar seguridad multifactor."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Comprobar complementos al iniciar"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Revisar actualizaciones del plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Habilitar integración de URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Habilitar integración de navegación"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "Habilitar integración de la aplicación"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Habilitar plugins para añadir aplicaciones"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Habilitar integración de programación"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Habilitar plugins para ejecutar tareas programadas"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Habilitar integración de eventos"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Habilitar integración de interfaz"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Excluir Ubicaciones Externas"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Periodo de inventario automático"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Mostrar nombres completos de los usuarios"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Habilitar datos de estación de prueba"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Recibir reportes de error"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Recibir notificación de errores del sistema"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Últimas impresoras usadas"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Un dominio vacío no está permitido."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nombre de dominio inválido: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabricante"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Empresa"
@@ -4050,8 +4193,8 @@ msgstr "Teléfono de contacto"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contacto"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Dirección"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Parte base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Número de parte de fabricante"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Proveedor"
@@ -4254,7 +4397,7 @@ msgstr "Proveedor"
msgid "Select supplier"
msgstr "Seleccionar proveedor"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Unidad de mantenimiento de stock de proveedores"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "costo base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Paquetes"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "múltiple"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Válido"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Desconocido"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Referencia del pedido"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Destacado"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Tiene Código de Proyecto"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Creado por"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Creado antes de"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Creado después de"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Fecha objetivo antes de"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Fecha objetivo después de"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Tiene Precio"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Completado antes de"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Completado después de"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Orden"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Orden completada"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Componente interno"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Orden pendiente"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Completados"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Tiene envío"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Orden de devolución"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Precio Total"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Precio total para este pedido"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Moneda de pedido"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "El contacto no coincide con la empresa seleccionada"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descripción del pedido (opcional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Enlace a Url externa"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Fecha objetivo"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Fecha de emisión"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Fecha de expedición del pedido"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Usuario o grupo responsable de este pedido"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Punto de contacto para este pedido"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Estado"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Estado de la orden de compra"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Empresa de la cual se están encargando los artículos"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Referencia del proveedor"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Código de referencia de pedido del proveedor"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "recibido por"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "La fecha de pedido fue completada"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destinación"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Destino para los artículos recibidos"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "El proveedor de la parte debe coincidir con el proveedor de PO"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "La partida no coincide con la orden de compra"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "La cantidad debe ser un número positivo"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr "Estado de la orden de venta"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Referencia del cliente "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Fecha de envío"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "enviado por"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "La orden ya fue completada"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "La orden ya fue cancelada"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Cantidad del artículo"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Referencia de partida"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Notas de partida"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descripción de partida (opcional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contexto adicional para esta línea"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Precio unitario"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "La parte del proveedor debe coincidir con el proveedor"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Parte del proveedor"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Recibido"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Precio de Compra"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Precio de compra unitario"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Precio de Venta"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Precio de venta unitario"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Enviado"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Cantidad enviada"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Fecha del envío"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Fecha de entrega"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Fecha de entrega del envío"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Revisado por"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Envío"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Número de envío"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Número de Seguimiento"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Información de seguimiento del envío"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Número de factura"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Número de referencia para la factura asociada"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "El envío ya ha sido enviado"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "El artículo de stock no ha sido asignado"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Línea"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Ítem"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Seleccionar artículo de stock para asignar"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Especificar la cantidad de asignación de stock"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Referencia de la orden de devolución"
-#: order/models.py:2777
+#: order/models.py:2847
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:2860
msgid "Return order status"
msgstr "Estado de la orden de devolución"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "El artículo de almacén debe ser especificado"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "La cantidad de retorno excede la cantidad de existencias"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
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:3135
msgid "Select item to return from customer"
msgstr "Seleccionar el artículo a devolver del cliente"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Fecha de recepción"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Resultado"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Salida para esta partida"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID del Pedido"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID del pedido a duplicar"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Copiar líneas"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Copiar partida del pedido original"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Copiar líneas adicionales"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Copiar Parámetros"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Partidas"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Líneas completadas"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplicar pedido"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Especificar opciones para duplicar este pedido"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "ID de pedido inválido"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Nombre del proveedor"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "El pedido no puede ser cancelado"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "El pedido tiene partidas incompletas"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "El pedido no está abierto"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Precio automático"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Moneda del precio de compra"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Combinar artículos"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Número de parte interna"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Nombre interno de parte"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Debe especificar la parte del proveedor"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "La orden de compra debe especificarse"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "El proveedor debe coincidir con la orden de compra"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Partida"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
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:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Código de barras"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Código de barras escaneado"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Código de barras en uso"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Se deben proporcionar las partidas"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Se requiere ubicación de destino"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr "Envíos"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Envíos completados"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Moneda del precio de venta"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Elementos asignados"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "No se proporcionaron detalles de envío"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "La cantidad debe ser positiva"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
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:1824 order/serializers.py:1954
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:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
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:2127
msgid "Return order line item"
msgstr "Partida de orden de devolución"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "La partida ya ha sido recibida"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Cantidad a devolver"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Moneda de precio de línea"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perdida"
@@ -5661,6 +5879,11 @@ msgstr "Reembolso"
msgid "Reject"
msgstr "Rechazo"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Emitido"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Orden de compra atrasada"
@@ -5696,7 +5919,7 @@ msgstr "Favoritos"
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Profundidad"
@@ -5704,7 +5927,7 @@ msgstr "Profundidad"
msgid "Filter by category depth"
msgstr "Filtrar por profundidad de categoría"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Nivel superior"
@@ -5712,7 +5935,7 @@ msgstr "Nivel superior"
msgid "Filter by top-level categories"
msgstr "Filtrar por categorías de nivel superior"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "En cascada"
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Tiene resultados"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Categoría de parte"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Ubicación Predeterminada"
msgid "Default location for parts in this category"
msgstr "Ubicación predeterminada para partes de esta categoría"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Estructural"
@@ -5837,12 +6064,12 @@ msgstr "Palabras clave predeterminadas"
msgid "Default keywords for parts in this category"
msgstr "Palabras clave por defecto para partes en esta categoría"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Icono"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Icono (opcional)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Vender múltiples"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Moneda utilizada para almacenar en caché los cálculos de precios"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Costo mínimo de BOM"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Costo mínimo de partes de componentes"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Costo máximo de BOM"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Costo máximo de partes de componentes"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Costo mínimo de compra"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Costo histórico mínimo de compra"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Costo máximo de compra"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Costo histórico máximo de compra"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Precio interno mínimo"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Costo mínimo basado en precios reducidos internos"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Precio interno máximo"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Costo máximo basado en precios reducidos internos"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Precio mínimo de proveedor"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Precio mínimo de la parte de proveedores externos"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Precio máximo de proveedor"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Precio máximo de la parte de proveedores externos"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Costo mínimo de variante"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Costo mínimo calculado de las partes variantes"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Costo máximo de variante"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Costo máximo calculado de las partes variantes"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Costo mínimo"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Anular el costo mínimo"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Costo máximo"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Reemplazar coste máximo"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Costo mínimo general calculado"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Precio de venta mínimo"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Precio de venta mínimo basado en precios reducidos"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Precio de venta máximo"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Precio de venta máximo basado en precios reducidos"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Costo de venta mínimo"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Precio de venta mínimo histórico"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Costo de Venta Máximo"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Precio de venta máximo histórico"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Número de artículos"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Fecha"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Costo de Stock Mínimo"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Costo mínimo estimado del stock disponible"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nombre de prueba"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Introduzca un nombre para la prueba"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Descripción de prueba"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Introduce la descripción para esta prueba"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Requerido"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "¿Es necesario pasar esta prueba?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Requiere valor"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Adjunto obligatorio"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Seleccionar parte principal"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sub parte"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Seleccionar parte a utilizar en BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Cantidad del artículo en BOM"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Este artículo BOM es opcional"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Referencia de artículo de BOM"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Notas del artículo de BOM"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Suma de verificación"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Suma de verificación de línea de BOM"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Validado"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Este artículo de BOM ha sido validado"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr ""
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "La cantidad debe ser un valor entero para las partes rastreables"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Debe especificar la subparte"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Ítem de BOM sustituto"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Artículo BOM superior"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Sustituir parte"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Parte 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Parte 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Seleccionar parte relacionada"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Nota para esta relación"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Categoría principal de parte"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Subcategorías"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Moneda de compra de ítem de stock"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Parte original"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Seleccione la parte original a duplicar"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Copiar Imagen"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Copiar imagen desde la parte original"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copiar BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
msgid "Copy parameter data from original part"
msgstr "Copiar datos del parámetro de la parte original"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Copiar Notas"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Cantidad Inicial de Stock"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Seleccionar fabricante (o dejar en blanco para saltar)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Número de parte del fabricante"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Nombre de categoría"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "En construcción"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Elementos de stock"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Duplicar Parte"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Stock Inicial"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Crear Parte con cantidad inicial de stock"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Información del proveedor"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Copiar Parámetros de Categoría"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Imagen Existente"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "El archivo de imagen no existe"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Validación de Lista de Materiales"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Puede construir"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Precio mínimo"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Anular el valor calculado para precio mínimo"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Precio mínimo de moneda"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Precio máximo"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Precio máximo de moneda"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Actualizar"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Seleccionar parte de la que copiar BOM"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Eliminar Datos Existentes"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Eliminar artículos BOM existentes antes de copiar"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Incluye Heredado"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Omitir filas no válidas"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Copiar partes sustitutas"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Complemento"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "No se encontró autor"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Materiales necesarios"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Imagen de parte"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Emitido"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Requerido para"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Número de serie"
@@ -8292,7 +8560,7 @@ msgstr "Artículo Stock Informe de prueba"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Elementos instalados"
@@ -8325,6 +8593,10 @@ msgstr "Ningún resultado (requerido)"
msgid "No result"
msgstr "Sin resultados"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Ubicación principal"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtrar por ubicación principal"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "El nombre de la pieza contiene (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Nombre de la pieza (expresión regular)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "IPN de Pieza (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "IPN de pieza contiene (insensible a mayúsculas y minúsculas)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "IPN de Pieza (expresión regular)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Existencias mínimas"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Existencias máximas"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Código de estado"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Ubicación externa"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Consumido por orden de construcción"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Instalado en otro artículo de existencias"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Árbol de piezas"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Actualizado antes de"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Actualizado después de"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Inventario antes de"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Inventario después de"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Desactualizado"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Cantidad requerida"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Debe suministrarse una parte válida"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Ubicación de Stock"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Ubicaciones de Stock"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Propietario"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Seleccionar Propietario"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Externo"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Se debe especificar la pieza"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "El objeto no puede pertenecer a sí mismo"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Artículo de stock padre"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Parte base"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Instalado en"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
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:1136 stock/serializers.py:1694
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:1141
msgid "Stock Quantity"
msgstr "Cantidad de Stock"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Build de origen"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Build para este item de stock"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Consumido por"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Orden de compra de origen"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Orden de compra para este artículo de stock"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Orden de venta de destino"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Eliminar al agotar"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Convertido a parte"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "La parte no está establecida como rastreable"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Cantidad debe ser un entero"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
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:1979
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:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "Artículo de stock contiene otros artículos"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "El artículo de stock está en producción"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Stock serializado no puede ser combinado"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Artículos de Stock Duplicados"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Los códigos de estado del stock deben coincidir"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Notas de entrada"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Debe proporcionarse un valor para esta prueba"
-#: stock/models.py:3030
+#: stock/models.py:3103
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:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Resultado de la prueba"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Valor de salida de prueba"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Adjunto de resultados de prueba"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Notas de prueba"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Finalizó"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Introduzca números de serie para nuevos artículos"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Número de pieza del proveedor"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Expirado"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Elementos secundarios"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Introduzca el número de artículos de stock para serializar"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Ubicación de stock de destino"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Los números de serie no se pueden asignar a esta parte"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Números de serie ya existen"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Añadir nota de transacción (opcional)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sub-ubicación"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "La parte debe ser vendible"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "El artículo está asignado a una orden de venta"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "El artículo está asignado a una orden de creación"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Cliente para asignar artículos de stock"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "La empresa seleccionada no es un cliente"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Notas de asignación de stock"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Debe proporcionarse una lista de artículos de stock"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notas de fusión de stock"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Permitir proveedores no coincidentes"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Permitir estado no coincidente"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Debe proporcionar al menos dos artículos de stock"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Sin cambios"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Valor de clave primaria de Stock"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "No hay existencias del artículo"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Notas de transacción de stock"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Ordenes de compra"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Órdenes de venta"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Ordenes de devolución"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nombre de usuario"
diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po
index d7baa4fe52..5ac7ef200b 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Estonian\n"
"Language: et_EE\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr ""
@@ -104,13 +105,13 @@ msgstr "Pane kuupäev"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Märkmed"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Kirjeldus"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Kirjeldus (valikuline)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Osa"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Valikuline"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Jälgitud"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Asukoht"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Tootekood"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Koostamise olek"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Loomise kuupäev"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Kogus"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Osa nimi"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Valikained"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Jälgitav"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Saadaval laos"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Ootel"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Tootmine"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Katkestatud"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Valmis"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "On link"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "On fail"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr "Pluginat pole"
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Uuendatud"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Seade võti"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Seade väärtus"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Pealkiri"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Avaldatud"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Kokkuvõte"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Loetud"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Pildifail"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Ühiku nimi"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Sümbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definitsioon"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Ühiku definitsioon"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Manus"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Puuduv fail"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Puuduv väline link"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Vali fail, mida lisada"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentaar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Faili suurus"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Silt"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Loodud"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Andmed"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Märkus"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Vöötkoodi andmed"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontekst"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Vastus"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Tulemus"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Mudeli liik"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "päeva"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "Automaatne varundus"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Vöötkoodi tugi"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponent"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Ostetav"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuaalne"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
-msgstr "Luba liidese integreerimine"
-
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
-msgstr "Luba pluginatel integreeruda kasutajaliidesesse"
-
-#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
+msgstr ""
+
+#: common/setting/system.py:1110
+msgid "Enable plugins to add URL routes"
+msgstr ""
+
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr "Luba liidese integreerimine"
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr "Luba pluginatel integreeruda kasutajaliidesesse"
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Tootja"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Ettevõte"
@@ -4050,8 +4193,8 @@ msgstr "Kontakttelefoni number"
msgid "Contact email address"
msgstr "Kontakt e-postiaadress"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Aadress"
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Tarnija"
@@ -4254,7 +4397,7 @@ msgstr "Tarnija"
msgid "Select supplier"
msgstr "Vali tarnija"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Staatus"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "Müügihind"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Saadetud"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Saadetis"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Rida"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Tellimuse ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "Kopeeritava tellimuse ID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Kopeeri read"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Kopeeri reaüksused algsest tellimusest"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopeeri parameetrid"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Määrake selle tellimuse dubleerimise valikud"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Vale tellimuse ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Tootekood"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Vöötkood"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Skännitud ribakood"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Saadetised"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Järgmised seerianumbrid ei ole saadaval"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr "Tagasimakse"
msgid "Reject"
msgstr "Keeldu"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Sügavus"
@@ -5704,7 +5927,7 @@ msgstr "Sügavus"
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Osa kategooria"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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 ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikoon"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikoon (valikuline)"
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Testimalle saab luua ainult testitavate osade jaoks"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Originaalosa"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopeeri pilt"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Kategooria nimi"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Ehitamine"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Tarnija info"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minimaalne hind"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maksimaalne hind"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Uuenda"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr "Paki plugin"
msgid "Plugin"
msgstr "Plugin"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Autorit ei leitud"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Seerianumber"
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Testitulemused"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Tarnija osa number"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Kasutajanimi"
diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po
index 715e3a4ede..7b7443fb03 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Language: fa_IR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "نمیتوان {original} را به {unit} تبدیل کرد"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "مقدار ارائه شده نامعتبر است"
@@ -104,13 +105,13 @@ msgstr "تاریخ را وارد کنید"
msgid "Invalid decimal value"
msgstr "مقدار اعشاری نامعتبر است"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "یادداشت"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "توضیحات"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "توضیحات (اختیاری)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "باید یک عدد معتبر باشد"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "ارز"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "وضعیت سفارش"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "قطعه"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "دسته"
@@ -605,7 +593,7 @@ msgstr "دسته"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "واگذار شده به من"
@@ -653,374 +641,365 @@ msgstr "تکمیل شده قبل از"
msgid "Completed after"
msgstr "تکمیل شده بعد از"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "مصرفی"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "اختیاری"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "مونتاژ"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "سفارش معوق"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "اختصاص داده شده"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "سفارش ساخت"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "مکان"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "سفارشهای ساخت"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "مرجع سفارش فروش"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "منبع محل"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "مقصد"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "تاریخ تکمیل"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "تکمیل شده توسط"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "صادر شده توسط"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "کاربری که این سفارش ساخت را صادر کرده است"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "پیوند خارجی"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po
index 8084760108..23f238bf38 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Finnish\n"
"Language: fi_FI\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Annettu määrä on virheellinen"
@@ -104,13 +105,13 @@ msgstr "Anna päivämäärä"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Merkinnät"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Kuvaus"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Kuvaus (valinnainen)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuutta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Osa"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategoria"
@@ -605,7 +593,7 @@ msgstr "Kategoria"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Sijainti"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Ulkoinen linkki"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Linkki ulkoiseen URLiin"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Määrä"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Varastotuote"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Sarjanumerot"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Ei sallittu"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Seurattavissa"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Odottaa"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Peruttu"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Valmis"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Päivitetty"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Viimeisimmän päivityksen aikaleima"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Hinta"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Salaisuus"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Isäntä"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Otsikko"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Linkki"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Julkaistu"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Julkaisija"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Yhteenveto"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Kuvatiedosto"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Liite"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Puuttuva tiedosto"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Puuttuva ulkoinen linkki"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Valitse liitettävä tiedosto"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentti"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Arvo"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Käytössä"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Muistiinpano"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "päivää"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "Automaattinen varmuuskopionti"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automaattisen varmuuskopioinnin aikaväli"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Viivakoodituki"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponentti"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Ostettavissa"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "Sisäiset hinnat"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Sisäisen hinnan ohitus"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr "Salli salasananpalautus"
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr "Salli rekisteröinti"
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr "Salli SSO"
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
-msgstr "Salli SSO kirjautumissivuilla"
-
#: common/setting/system.py:963
-msgid "Enable SSO registration"
-msgstr "Salli SSO rekisteröinti"
+msgid "Edit Completed Purchase Orders"
+msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
+msgid "Automatically mark purchase orders as complete when all line items are received"
+msgstr ""
+
+#: common/setting/system.py:986
+msgid "Enable password forgot"
+msgstr "Salli salasananpalautus"
+
+#: common/setting/system.py:987
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
+msgstr "Salli rekisteröinti"
+
+#: common/setting/system.py:993
+msgid "Enable self-registration for users on the login pages"
+msgstr ""
+
+#: common/setting/system.py:998
+msgid "Enable SSO"
+msgstr "Salli SSO"
+
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
+msgstr "Salli SSO kirjautumissivuilla"
+
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
+msgstr "Salli SSO rekisteröinti"
+
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
+msgstr ""
+
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
+msgstr ""
+
+#: common/setting/system.py:1014
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+msgstr ""
+
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Sähköposti vaaditaan"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr ""
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "Sähköpostiosoite kahdesti"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr ""
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "Salasana kahdesti"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "Sallitut verkkotunnukset"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr ""
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Pakota MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr ""
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr ""
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr ""
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr ""
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr ""
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr ""
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr ""
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Verkkotunnus ei saa olla tyhjä."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Virheellinen verkkotunnus: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Valmistaja"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Yritys"
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakti"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Osoite"
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Valmistajan osanumero"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Toimittaja"
@@ -4254,7 +4397,7 @@ msgstr "Toimittaja"
msgid "Select supplier"
msgstr "Valitse toimittaja"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Toimittajan varastonimike"
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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ä"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Valmis"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Hinta yhteensä"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Tilauksen valuutta"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Tila"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Asiakkaan viite "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Vastaanotettu"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Lähetetty"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Seurantakoodi"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Laskunumero"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Viivakoodi"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Kadonnut"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr "Oletus avainsanat"
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Kuvake"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Kuvake (valinnainen)"
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Päivämäärä"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Valmistajan osanumero"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Osan kuva"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Sarjanumero"
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Käyttäjätunnus"
diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po
index 803afef3a7..5c2d03e1fc 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Language: fr_FR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Impossible de convertir {original} en {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Quantité fournie invalide"
@@ -104,13 +105,13 @@ msgstr "Entrer la date"
msgid "Invalid decimal value"
msgstr "Valeur décimale invalide"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Description"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Description (facultative)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Devise"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Statut de la commande"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Fabrication parente"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Inclure les variantes"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Inclure les variantes"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Inclure les variantes"
msgid "Part"
msgstr "Pièce"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Catégorie"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Attribué à moi"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Date min"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Date maximale"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Exclure l'arbre"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consommable"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Facultatif"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Assemblage"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Suivi"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testable"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Commande en cours"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Allouée"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Consommé"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "En Commande"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Ordre de Fabrication"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Emplacement"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Sortie"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Filtrer par l'identifiant (ID) des articles du stock de sortie. Utilisez 'null' pour trouver les éléments de fabrication non installés."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Ordres de Fabrication"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "La liste des composants de l'assemblage n'a pas été validée"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Impossible de créer un ordre de fabrication pour une pièce inactive"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Impossible de créer un ordre de fabrication pour une pièce non verrouillée"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Les ordres de fabrication ne peuvent être exécutées qu'en externe pour les pièces achetables"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Un utilisateur ou un groupe responsable doit être spécifié"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "La pièce de commande de construction ne peut pas être changée"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "La date cible doit être postérieure à la date de début"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Référence de l' Ordre de Fabrication"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Référence"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Brève description de la fabrication (optionnel)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Commande de fabrication associée à cette fabrication"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Sélectionnez la pièce à construire"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Bon de commande de référence"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Commande de vente à laquelle cette fabrication est allouée"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Emplacement d'origine"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Fabrication externe"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Cet ordre de fabrication est exécuté en externe"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Emplacement cible"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Quantité a fabriquer"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Nombre de stock items à construire"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Articles terminés"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Nombre d'articles de stock qui ont été terminés"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "État de la construction"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Code de statut de construction"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Code de lot"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Date de création"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Début de la fabrication"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Date de début prévue pour cet ordre de construction"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Date d'achèvement cible"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Date d'achèvement"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "achevé par"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Émis par"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Utilisateur ayant émis cette commande de construction"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsable"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Utilisateur ou groupe responsable de cet ordre de construction"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Lien Externe"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Lien vers une url externe"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Priorité de fabrication"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Priorité de cet ordre de fabrication"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Code du projet"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Code de projet pour cet ordre de construction"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Impossible de terminer l'ordre de fabrication avec des constructions enfant ouvertes"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Impossible de terminer l'ordre de fabrication avec des sorties incomplètes"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Échec du déchargement de la tâche pour terminer les allocations de construction"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "La commande de construction {build} a été effectuée"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Une commande de construction a été effectuée"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Pas d'ordre de production défini"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "L'ordre de production a déjà été réalisé"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "L'ordre de production de correspond pas à l'ordre de commande"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "La quantité doit être supérieure à zéro"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
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:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Les articles en stock alloués sont toujours en production"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Poste de l'ordre de construction"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Création de l'objet"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Création de l'objet"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Quantité"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Quantité requise pour la commande de construction"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Quantité de stock consommé"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "La quantité allouée doit être supérieure à zéro"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "La quantité doit être de 1 pour stock sérialisé"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "L'article de stock est suralloué"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Article en stock"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Stock d'origine de l'article"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Quantité de stock à allouer à la construction"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Installer dans"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Stock de destination de l'article"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Niveau de construction"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nom de l'article"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Sortie d'assemblage"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "L'ordre de production ne correspond pas à l'ordre parent"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "La pièce en sortie ne correspond pas à la pièce de l'ordre de construction"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Cet ordre de production a déjà été produit"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Cet ordre de production n'est pas complètement attribué"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Entrer la quantité désiré pour la fabrication"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Quantité entière requise pour les pièces à suivre"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Numéros de série"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Entrer les numéros de séries pour la fabrication"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Emplacement de stock pour la sortie de la fabrication"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Allouer automatiquement les numéros de série"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Les numéros de série suivants existent déjà, ou sont invalides"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Une liste d'ordre de production doit être fourni"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Emplacement du stock pour les sorties épuisées"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Ignorer les allocations"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Abandonner les allocations de stock pour les sorties abandonnées"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Motif de l'élimination des produits de construction(s)"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Emplacement des ordres de production achevés"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Accepter l'allocation incomplète"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Compléter les sorties si le stock n'a pas été entièrement alloué"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consommation du stock alloué"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consommer tout stock qui a déjà été alloué à cette construction"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Retirer les sorties incomplètes"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Supprimer toutes les sorties de construction qui n'ont pas été complétées"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Non permis"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Accepter comme consommé par cet ordre de construction"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Désaffecter avant de terminer cette commande de fabrication"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Stock suralloué"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Comment voulez-vous gérer les articles en stock supplémentaires assignés à l'ordre de construction"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Certains articles de stock ont été suralloués"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Accepter les non-alloués"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Accepter les articles de stock qui n'ont pas été complètement alloués à cette ordre de production"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Le stock requis n'a pas encore été totalement alloué"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Accepter les incomplèts"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Accepter que tous les ordres de production n'aient pas encore été achevés"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "La quantité nécessaire n'a pas encore été complétée"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "L'ordre de construction a des ordres de construction enfants ouverts"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "L'ordre de construction doit être en état de production"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "L'ordre de production a des sorties incomplètes"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Chaîne d'assemblage"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Sortie d'assemblage"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "La sortie de la construction doit pointer vers la même construction"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Élément de la ligne de construction"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "L'article doit être en stock"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Quantité disponible ({q}) dépassée"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "La sortie de construction doit être spécifiée pour l'allocation des pièces suivies"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Les articles d'allocation doivent être fournis"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Emplacement de stock où les pièces doivent être fournies (laissez vide pour les prendre à partir de n'importe quel emplacement)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Emplacements exclus"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Exclure les articles de stock de cet emplacement sélectionné"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Stock interchangeable"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Les articles de stock à plusieurs emplacements peuvent être utilisés de manière interchangeable"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Stock de substitution"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Autoriser l'allocation de pièces de remplacement"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Objets Optionnels"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Référence de la nomenclature"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID de la pièce de la nomenclature"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nomenclature Nom de la pièce"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Construire"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Pièce fournisseur"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Quantité allouée"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Référence de construction"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nom de la catégorie de pièces"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Traçable"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Reçu de quelqu'un"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Autoriser les variantes"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Article du BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "En Production"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Planifié pour fabrication"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Stock externe"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Stock disponible"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Stock de substitution disponible"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Stock de variantes disponibles"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "La quantité consommée dépasse la quantité allouée"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Note optionnelle pour la consommation du stock"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Dupliquer l'allocation de l'article de fabrication"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Dupliquer l'allocation de ligne de fabrication"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Au moins un élément ou une ligne doit être fourni"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "En attente"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Fabrication"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "En pause"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Annulé"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Terminé"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "La commande de construction {build} a été effectuée"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Une commande de construction a été effectuée"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Stock requis pour la commande de construction"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "L'ordre de fabrication {build} nécessite du stock additionnel"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Ordre de commande en retard"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "L'ordre de commande {bo} est maintenant en retard"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "C'est un lien"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "C'est un fichier"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
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,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Mise à jour"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Date de la dernière mise à jour"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Mis à jour par"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Utilisateur qui a mis à jour cet objet en dernier"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Code projet unique"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Description du projet"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Paramétrés des touches"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valeur du paramètre"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "La valeur doit être une valeur booléenne"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "La valeur doit être un nombre entier"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Valeur doit être un nombre valide"
-#: common/models.py:900
+#: common/models.py:906
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:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Prix"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Point final"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
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:1465 users/models.py:172
msgid "Token"
msgstr "Jeton"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Jeton d'accès"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Confidentiel"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Secret partagé pour HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID message"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identifiant unique pour ce message"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Hôte"
-#: common/models.py:1587
+#: common/models.py:1593
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:1601
msgid "Header"
msgstr "Entête"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "En-tête de ce message"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Corps"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Corps de ce message"
-#: common/models.py:1614
+#: common/models.py:1620
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:1625
msgid "Worked on"
msgstr "Travaillé sur"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Le travail sur ce message est-il terminé ?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titre"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Lien"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publié"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Auteur"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Résumé"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Lu"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Cette nouvelle a-t-elle été lue ?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Fichier image"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Type de modèle cible pour cette image"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "ID du modèle cible pour cette image"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unité personnalisée"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Le symbole de l'unité doit être unique"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nom de l'unité"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbole"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Symbole d'unité facultatif"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Définition"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Définition de l'unité"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Pièce jointe"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Fichier manquant"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Lien externe manquant"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Type de modèle"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Type de modèle cible pour l'image"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Sélectionnez un fichier à joindre"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Commentaire"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Commentaire sur la pièce jointe"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Date de téléchargement"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Date de téléchargement du fichier"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Taille du fichier"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Taille du fichier en octets"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
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:2278
msgid "Custom State"
msgstr "État personnalisé"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "États membres de l'Union européenne"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Ensemble d'états de référence"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Clé logique"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valeur"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Étiquette"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Couleur"
-#: common/models.py:2145
+#: common/models.py:2321
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:2329
msgid "Model"
msgstr "Modèle"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Modèle cet état est associé à"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Le modèle doit être sélectionné"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "La clé doit être sélectionnée"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "La clé logique doit être sélectionnée"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
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:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Liste de sélection"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Listes de sélection"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Nom de la liste de sélection"
-#: common/models.py:2259
+#: common/models.py:2435
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:2441 part/models.py:1297
msgid "Locked"
msgstr "Verrouillé"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Cette liste de sélection est-elle verrouillée ?"
-#: common/models.py:2272
+#: common/models.py:2448
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:2456
msgid "Source Plugin"
msgstr "Plug-in source"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Plugin qui fournit la liste de sélection"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Chaîne source"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Entrée par défaut"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Créé le"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Dernière mise à jour"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Entrée de la liste de sélection"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Entrées de la liste de sélection"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
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:2570
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:2576
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:2583
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:2617
msgid "Parameter Template"
msgstr "Modèle de paramètre"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Modèle de paramètre"
-#: common/models.py:2479
+#: common/models.py:2655
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:2660
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:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Les choix doivent être uniques"
-#: common/models.py:2521
+#: common/models.py:2697
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:2719
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:2725
msgid "Parameter Name"
msgstr "Nom du paramètre"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unités"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Unités physiques pour ce paramètre"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Description des paramètres"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Case à cocher"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Ce paramètre est-il une case à cocher ?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Choix"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr "Liste de sélection pour ce paramètre"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Activé"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Ce modèle de paramètre est-il activé ?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Paramètre"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Paramètres"
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
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:2964
msgid "Model ID"
msgstr "Identifiant du Modèle (ID)"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Modèle de paramètre"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Données"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Note"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Champ de notes facultatif"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Analyse du code-barres"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Données du code-barres"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Horodatage"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Date et heure du scan de code-barres"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contexte"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Données contextuelles pour la lecture du code-barres"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Réponse"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Résultat"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "La lecture du code-barres a-t-elle réussi ?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Une erreur s'est produite"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "Message email"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "Messages email"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Annoncé"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Envoyé"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Échec"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Livré"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Confirmé"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Entrant"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Sortant"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Sans réponse"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Suivi de livraison"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Suivi de la lecture"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Suivi du clic"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "ID Global"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "ID du sujet de discussion"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Fil de discussion"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Fil lié à ce message"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Priorité"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Fil d'Email"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Fils d'Emails"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Identifiant unique pour ce fil"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Démarré en interne"
-#: common/models.py:3195
+#: common/models.py:3371
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:3376
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:3381
msgid "Date and time that the thread was last updated"
msgstr "Date et heure de dernière mise à jour du fil"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Articles reçus"
@@ -2451,25 +2491,25 @@ msgstr "Mots-clés Arguments"
msgid "Task keyword arguments"
msgstr "Mots-clés arguments tâche"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Type de modèle"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle."
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "La liste de sélection est verrouillée"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "jours"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Intervalle de vérification des mises à jour"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Backup automatique"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervalle de sauvegarde automatique"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervalle de suppression des tâches"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervalle de suppression du journal d'erreur"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervalle de suppression du journal de notification"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "Intervalle de suppression d'Email"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Protéger le log d'Email"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
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:363
msgid "Barcode Support"
msgstr "Support des code-barres"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Résultats des codes-barres des magasins"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Scanners de codes-barres Comptage maximal"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Délai d'entrée du code-barres"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Délai de traitement du code-barres"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Prise en charge de la webcam code-barres"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Code-barres Afficher les données"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Plugin de génération de codes-barres"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Modifications de la pièce"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr "Révision de l'assemblage uniquement"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
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:424
msgid "Allow Deletion from Assembly"
msgstr "Autoriser la suppression de l'Assemblée"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "Regex IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Autoriser les IPN dupliqués"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Autoriser l'édition de l'IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copier les données de la pièce"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
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:453
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:458
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:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copier les templates de paramètres de catégorie"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
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:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Composant"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Achetable"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Vendable"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Les pièces sont vendables par défaut"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuelle"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Les pièces sont virtuelles par défaut"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Afficher les pièces connexes"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Stock initial"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Données initiales du fournisseur"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Format d'affichage du nom de la pièce"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Icône de catégorie par défaut"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Nombre minimal de décimales"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Nombre maximal de décimales pour la tarification"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Utiliser le prix fournisseur"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Remplacer l'historique des achats"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Utiliser les prix des articles en stock"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Âge de tarification des articles de stock"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Utiliser les prix variants"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Variantes actives uniquement"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Mise à jour automatique des prix"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Intervalle de regénération des prix"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Prix internes"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Activer les prix internes pour les pièces"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Substitution du prix interne"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Activer l'impression d'étiquettes"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Étiquette image DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Activer les rapports"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Activer la génération de rapports"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Mode Débogage"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Journal des erreurs"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Renforcer les unités des paramètres"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Numéro de Série Universellement Unique"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Supprimer le stock épuisé"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Modèle de code de lot"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Expiration du stock"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Activer la fonctionnalité d'expiration du stock"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vendre le stock expiré"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Autoriser la vente de stock expiré"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Délai de péremption du stock"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Construction de stock expirée"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Autoriser la construction avec un stock expiré"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Contrôle de la propriété des stocks"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
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:764
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:769
msgid "Show Installed Stock Items"
msgstr "Afficher les pièces en stock installées"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
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:777
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:783
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:785
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:791
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:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Exiger une partie active"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Requiert une pièce verrouillée"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Exiger une nomenclature valide"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Exiger des ordonnances fermées pour les enfants"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Ordres de fabrication externes"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Activer la fonctionnalité d'ordre de fabrication externe"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blocage jusqu'à la réussite des tests"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Empêcher l'achèvement des résultats de la construction jusqu'à ce que tous les tests requis soient réussis"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Activer les retours de commandes"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Modèle de référence de retour de commande"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Modèle requis pour générer le champ de référence de la commande de retour"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Modifier les retours de commandes terminées"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Autoriser la modification des retours après leur enregistrement"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Modèle de référence de bon de commande"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Modèle requis pour générer le champ de référence du bon de commande"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Expédition par défaut du bon de commande"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Activer la création d'expédition par défaut avec les bons de commandes"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Modifier les commandes de vente terminées"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "L'expédition nécessite une vérification"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Empêcher l'achèvement des envois jusqu'à ce que les articles aient été vérifiés"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Marquer les commandes expédiées comme achevées"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Les commandes marquées comme expédiées seront automatiquement complétées, en contournant le statut « expédié »"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
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:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Modifier les bons de commande terminés"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Convertir la monnaie"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Achat automatique des commandes"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Activer les mots de passe oubliés"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Activer les inscriptions"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Activer le SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "Activer l'inscription SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Activer la synchronisation du groupe SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "Clé du groupe SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Carte de groupe SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Supprimer les groupes en dehors de SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email requis"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Saisie automatique des utilisateurs SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Courriel en double"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Mot de passe deux fois"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Domaines autorisés"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grouper sur inscription"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Forcer l'authentification multifacteurs"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Vérifier les plugins au démarrage"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Vérifier les mises à jour des plugins"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Activer l'intégration d'URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Autoriser les plugins à ajouter des chemins URL"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Activer l'intégration de navigation"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "Activer l'intégration de plugins"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
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:1130
msgid "Enable schedule integration"
msgstr "Activer l'intégration du planning"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Activer l'intégration des évènements"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Permettre l'intégration de l'interface"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Activer l'intégration mail"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Activer les codes de projet"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Exclure les localisations externes"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Période de l'inventaire automatique"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Afficher les noms des utilisateurs"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Afficher les profils d'utilisateur"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Activer les données de station de test"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Désactivé : Le chemin de la catégorie complète est affiché comme un info-bulle de survol. Activé : Le chemin de la catégorie complète est affiché en texte brut."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Recevoir des rapports d'erreur"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Recevoir des notifications en cas d'erreurs du système"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Dernières machines d'impression utilisées"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Sauvegarder les dernières machines d'impression utilisées par un utilisateur"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Tous les modèles"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Aucun type de modèle d'attachement n'est fourni"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Type de modèle de pièce jointe non valide"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Les places minimales ne peuvent être supérieures aux places maximales"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Le nombre maximum de places ne peut être inférieur au nombre minimum de places"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Un domaine vide n'est pas autorisé."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nom de domaine invalide : {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "La valeur doit être en majuscules"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "La valeur doit être un identifiant de variable valide"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabricant"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Société"
@@ -4050,8 +4193,8 @@ msgstr "Numéro de téléphone de contact"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contact"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adresse"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Pièce de base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "Référence fabricant"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Référence du fabricant"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Fournisseur"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Unité de gestion des stocks des fournisseurs"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "coût de base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Conditionnement"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "plusieurs"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Valide"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Inconnu"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ 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:132
msgid "Order Reference"
msgstr "Référence de commande"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Remarquable"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "A le code du projet"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Créé par"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Créé avant"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Créé après"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "A la date de début"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Date de début Avant"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Date de début Après"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "A une date cible"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Date cible Avant"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Date cible Après"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Possède un Tarif"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Terminé avant"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Terminé après"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Commande"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Commande Complétée"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Pièces Internes"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Commande En Attente"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Terminé"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Fait l'objet d'une expédition"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Retour de commande"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Prix Total"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Prix total pour cette commande"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Devise de la commande"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Cette commande est verrouillée et ne peut être modifiée"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Le contact ne correspond pas à l'entreprise sélectionnée"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "La date de début doit être antérieure à la date cible"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "L'adresse ne correspond pas à la société sélectionnée"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Description de la commande (facultatif)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Lien vers une page externe"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Date de début"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Date Cible"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Date prévue pour la livraison de la commande. La commande sera en retard après cette date."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Date d'émission"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Date d'émission de la commande"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Utilisateur ou groupe responsable de cette commande"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Point de contact pour cette commande"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "État"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Statut de la commande d'achat"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Société de laquelle les articles sont commandés"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Référence du fournisseur"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Code de référence de la commande fournisseur"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "reçu par"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
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:743 order/models.py:2101
msgid "Destination"
msgstr "Destination"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Destination des articles reçus"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Le fournisseur de la pièce doit correspondre au fournisseur de la commande"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Le poste ne correspond pas au bon de commande"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Il manque une pièce liée à l'article de la ligne"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "La quantité doit être un nombre positif"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Société à laquelle les articles sont vendus"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Statut de la commande client"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Référence client "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Nom de l’expédition"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "expédié par"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "La commande est déjà terminée"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "La commande est déjà annulée"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Nombre d'élement"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Référence du poste"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Notes sur les postes"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Description du poste (facultatif)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contexte supplémentaire pour cette ligne"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Prix unitaire"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Poste du bon de commande"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "La pièce du fournisseur doit correspondre à celle du fournisseur"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "L'ordre de fabrication doit être marqué externe"
-#: order/models.py:1951
+#: order/models.py:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Pièce fournisseur"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Reçu"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Prix d'achat"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Prix d'achat unitaire"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Ligne supplémentaire du bon de commande"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Poste de commande client"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Prix de vente"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Prix de vente unitaire"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Expédié"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Quantité expédiée"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Envoi de la commande client"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "L'adresse d'expédition doit correspondre au client"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Adresse de livraison pour cet envoi"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Date d'expédition"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Date de Livraison"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Date de livraison de l'envoi"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Vérifié par"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Envoi"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Numéro d'expédition"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "N° de suivi"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Information de suivi des colis"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "N° de facture"
-#: order/models.py:2390
+#: order/models.py:2460
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:2506
msgid "Shipment has already been sent"
msgstr "Le colis a déjà été envoyé"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
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:2586
msgid "Sales Order Extra Line"
msgstr "Ligne supplémentaire de commande client"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Affectation des commandes clients"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "L'article de stock n'a pas été assigné"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Ligne"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Article"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Sélectionner l'article de stock à affecter"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Saisir la quantité d'allocation de stock"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Retour Référence de la commande"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Entreprise à l'origine du retour des articles"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Statut du retour de commande"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Poste de l'ordre de retour"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "L'article en stock doit être spécifié"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "La quantité retournée dépasse la quantité en stock"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
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:3135
msgid "Select item to return from customer"
msgstr "Sélectionner l'article à retourner par le client"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Date de réception"
-#: order/models.py:3081
+#: order/models.py:3151
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:3163
msgid "Outcome"
msgstr "Résultats"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Résultat pour ce poste"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Ordre de retour Ligne supplémentaire"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID de commande"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID de l'ordre à dupliquer"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Copier des lignes"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Copier les postes de l'ordre original"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Copier les lignes supplémentaires"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Copier les paramètres"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Postes de travail"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Lignes achevées"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplicata de commande"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Spécifier les options de duplication de cette commande"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "ID de commande invalide"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Nom du fournisseur"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
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:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "La commande comporte des postes incomplets"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "La commande n'est pas ouverte"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Tarification automobile"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Devise du prix d'achat"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Fusionner des éléments"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Unité de gestion des stocks"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Numéro de pièce interne"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Nom de la pièce interne"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "La pièce du fournisseur doit être spécifiée"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Le bon de commande doit être spécifié"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Le fournisseur doit correspondre au bon de commande"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Poste"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
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:880
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:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Note supplémentaire pour les articles en stock entrant"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Code-barres"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Code-barres scanné"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Les postes doivent être fournis"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "L'emplacement de la destination doit être spécifié"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Les valeurs de code-barres fournies doivent être uniques"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Envois"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Envois terminés"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "Lignes allouées"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Devise du prix de vente"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Postes alloués"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
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:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "La quantité doit être positive"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
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:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "L'envoi n'est pas associé à cette commande"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Les numéros de série suivants sont indisponibles"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Poste de commande de retour"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "Le poste a déjà été reçu"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Quantité à retourner"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Devise du prix de la ligne"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perdu"
@@ -5661,6 +5879,11 @@ msgstr "Remboursement"
msgid "Reject"
msgstr "Refuser"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Délivré"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Bon de commande en souffrance"
@@ -5696,7 +5919,7 @@ msgstr "Étoilé"
msgid "Filter by starred categories"
msgstr "Filtrer par catégories étoilées"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Profondeur"
@@ -5704,7 +5927,7 @@ msgstr "Profondeur"
msgid "Filter by category depth"
msgstr "Filtrer par profondeur de catégorie"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Premier niveau"
@@ -5712,7 +5935,7 @@ msgstr "Premier niveau"
msgid "Filter by top-level categories"
msgstr "Filtrer par catégories de premier niveau"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Cascade"
@@ -5732,75 +5955,79 @@ msgstr "Filtrer par catégorie de parents"
msgid "Exclude sub-categories under the specified category"
msgstr "Exclure les sous-catégories de la catégorie spécifiée"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "A des résultats"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Est variante"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Est la révision"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "A des révisions"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Nomenclature valide"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Catégories en cascade"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
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:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "La pièce d'assemblage est active"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "La pièce d'assemblage est traçable"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "La pièce d'assemblage est testable"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Le composant est testable"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Utilise"
@@ -5809,11 +6036,11 @@ msgstr "Utilise"
msgid "Part Category"
msgstr "Catégorie de composant"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Emplacement par défaut"
msgid "Default location for parts in this category"
msgstr "Emplacement par défaut des pièces de cette catégorie"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Structurel"
@@ -5837,12 +6064,12 @@ msgstr "Mots-clés par défaut"
msgid "Default keywords for parts in this category"
msgstr "Mots-clés par défaut pour les pièces de cette catégorie"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Icône"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Icône (facultatif)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Ventes multiples"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Devise utilisée pour cacher les calculs de prix"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Coût minimum de la nomenclature"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Coût minimal des composants"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Coût maximal de la nomenclature"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Coût maximal des composants"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Coût d'achat minimum"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Coût d'achat historique minimum"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Coût d'achat maximum"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Coût d'achat historique maximum"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Prix interne minimum"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Coût minimum basé sur des ruptures de prix internes"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Prix interne maximum"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Coût maximum basé sur les écarts de prix internes"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Prix minimum du fournisseur"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Prix minimum des pièces provenant de fournisseurs externes"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Prix maximum du fournisseur"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Prix maximum des pièces provenant de fournisseurs externes"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Coût minimum de la variante"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Calcul du coût minimum des pièces de la variante"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Coût maximal de la variante"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Calcul du coût maximal des pièces de la variante"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Coût minimal"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Remplacer le coût minimum"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Coût maximal"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Dépassement du coût maximal"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Calcul du coût minimum global"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Calcul du coût maximum global"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Prix de vente minimum"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Prix de vente minimum basé sur des ruptures de prix"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Prix de vente maximum"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Prix de vente maximum en fonction des écarts de prix"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Coût minimum de vente"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Prix de vente historique minimum"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Coût de vente maximum"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Prix de vente historique maximum"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Partie pour l'inventaire"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Nombre d'articles"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Nombre d'entrées individuelles au moment de l'inventaire"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Stock total disponible au moment de l'inventaire"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Date"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Date de l'inventaire"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Coût minimum du stock"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Coût minimum estimé des stocks disponibles"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Coût maximal du stock"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Coût maximum estimé des stocks disponibles"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Vente de pièces détachées Prix cassé"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Modèle de test partiel"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nom de test"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Entrez un nom pour le test"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Clé de test"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Clé simplifiée pour le test"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Description du test"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Saisir la description de ce test"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Ce test est-il activé ?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Requis"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Ce test est-il obligatoire pour passer l'examen ?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Valeur requise"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Nécessite une pièce jointe"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Choix valables pour ce test (séparés par des virgules)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
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:3956
+#: part/models.py:4080
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:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Sélectionner la partie parentale"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sous-partie"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Sélectionner la pièce à utiliser dans la nomenclature"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Quantité de nomenclature pour ce poste de nomenclature"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Ce poste de nomenclature est facultatif"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Définir la quantité"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Attrition"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Arrondi au multiple"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Référence du poste de nomenclature"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Notes sur les postes de nomenclature"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Somme de contrôle"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Somme de contrôle de la ligne de nomenclature"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Validée"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Ce poste de nomenclature a été validé"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Obtient l'héritage"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
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:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "La sous-partie doit être spécifiée"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Remplacement d'un poste de nomenclature"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Poste de nomenclature parent"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Pièce de rechange"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Première partie"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Partie 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Sélectionner une partie connexe"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Note pour cette relation"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Une relation en double existe déjà"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Catégorie de parents"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Catégorie de pièce mère"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Sous-catégories"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Résultats"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Devise d'achat de l'item"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Le fichier n'est pas une image"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Partie originale"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Sélectionner la partie originale à dupliquer"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Copier l'image"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Copier l'image à partir de la partie originale"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copier la nomenclature"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
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:442
msgid "Copy Notes"
msgstr "Notes sur la copie"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Copier les notes de la partie originale"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Test Copie"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Quantité de stock initial"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Emplacement initial du stock"
-#: part/serializers.py:459
+#: part/serializers.py:478
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:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Numéro de pièce du fabricant"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
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:555
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:840
msgid "Category Name"
msgstr "Nom catégorie"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Construction"
-#: part/serializers.py:846
+#: part/serializers.py:870
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:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Éléments en stock"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Révisions"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Stock non attribué"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Variante Stock"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Dupliquer une pièce"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Copier les données initiales d'une autre partie"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Stock initial"
-#: part/serializers.py:976
+#: part/serializers.py:1004
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:1010
msgid "Supplier Information"
msgstr "Informations sur le fournisseur"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Copier les paramètres de la catégorie"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Image existante"
-#: part/serializers.py:999
+#: part/serializers.py:1027
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:1044
msgid "Image file does not exist"
msgstr "Le fichier image n'existe pas"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Valider l'ensemble de la nomenclature"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Peut construire"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Nécessaire pour fabrication"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Alloué à la fabrication"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Nécessaire pour les commandes"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Alloué aux commandes"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Prix Minimum"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Remplacer la valeur calculée pour le prix minimum"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Prix minimum monnaie"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Prix Maximum"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Remplacer la valeur calculée pour le prix maximum"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Devise du prix maximum"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Mise à jour"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Mise à jour des prix pour cette pièce"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Sélectionner l'assemblage parent"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Sélectionner le composant"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
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:2025
msgid "Remove Existing Data"
msgstr "Supprimer les données existantes"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
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:2031
msgid "Include Inherited"
msgstr "Inclure l'héritage"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Sauter les lignes non valides"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Copier les pièces de remplacement"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Plugin Package"
msgid "Plugin"
msgstr "Extension"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Aucun auteur trouvé"
@@ -8021,7 +8292,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"
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Matériel nécessaire"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Image partielle"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Délivré"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Requis pour"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Numéro de série"
@@ -8292,7 +8560,7 @@ msgstr "Rapport de test des articles en stock"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Éléments installés"
@@ -8325,6 +8593,10 @@ msgstr "Pas de résultat (obligatoire)"
msgid "No result"
msgstr "Pas de résultat"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "la balise part_image nécessite une instance de Part"
msgid "company_image tag requires a Company instance"
msgstr "la balise company_image nécessite une instance d'entreprise"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filtrer par profondeur de localisation"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Filtrer par lieux de premier niveau"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Inclure les sous-emplacements dans les résultats filtrés"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Emplacement parent"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtrer par emplacement parent"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Nom de la pièce (insensible à la casse)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Le nom de la pièce contient (insensible à la casse)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Nom de la pièce (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Partie IPN (insensible à la casse)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "La partie IPN contient (insensible à la casse)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Partie IPN (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Stock minimum"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Stock maximum"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Code de statut"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Emplacement externe"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Consommé par l'ordre de construction"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Installé dans un autre article en stock"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Arbre en pièces détachées"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Mise à jour avant"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Mise à jour après"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Inventaire avant"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Inventaire après"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Date d'expiration avant"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Date d’expiration après"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Périmé"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "La quantité est requise"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "La partie valide doit être fournie"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Le fournisseur donné n'existe pas"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "La pièce du fournisseur a une taille d'emballage définie, mais le drapeau use_pack_size n'est pas activé"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Les numéros de série ne peuvent pas être fournis pour une pièce non traçable"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Type d'emplacement du stock"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Types d'emplacements de stock"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Emplacement du stock"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Emplacement des stocks"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Propriétaire"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Sélectionner un propriétaire"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Externe"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Il s'agit d'un emplacement de stock externe"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Type d'emplacement"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Type d'emplacement du stock de cet emplacement"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "La pièce doit être spécifiée"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "L'objet ne peut pas s'appartenir à lui-même"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Poste de stock parent"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Pièce de base"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Installé dans"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
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:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Code de lot pour cet article de stock"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Quantité en stock"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Source Construire"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Construire pour cet article en stock"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Consommé par"
-#: stock/models.py:1139
+#: stock/models.py:1164
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:1173
msgid "Source Purchase Order"
msgstr "Bon de commande source"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Commande d'achat pour cet article en stock"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Destination de la commande client"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Supprimer lors de l'épuisement"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Converti en partie"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
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:1960
msgid "Quantity must be integer"
msgstr "La quantité doit être un nombre entier"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
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:1979
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:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Le modèle de test n'existe pas"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "L'article de stock contient d'autres articles"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "L'article de stock est actuellement en production"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Articles de stock en double"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Les codes d'état des stocks doivent correspondre"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Suivi des articles en stock"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Notes d'entrée"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Résultat du test de l'article en stock"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Une valeur doit être fournie pour ce test"
-#: stock/models.py:3030
+#: stock/models.py:3103
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:3108
msgid "Invalid value for this test"
msgstr "Valeur non valide pour ce test"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Résultat du test"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Valeur de sortie du test"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Pièce jointe au résultat du test"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Notes de test"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Station de test"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Commencé"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Horodatage du début du test"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Fini"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Horodatage de la fin du test"
@@ -8913,214 +9193,234 @@ msgstr "Utiliser la taille de l'emballage lors de l'ajout : la quantité défini
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Entrez les numéros de série pour les nouveaux articles"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Référence du fournisseur"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Expiré"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Éléments enfants"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Suivi des éléments"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Prix d'achat de cet article en stock, par unité ou par paquet"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Entrez le nombre d'articles en stock à sérialiser"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Emplacement du stock de destination"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Les numéros de série ne peuvent pas être assignés à cette pièce"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Les numéros de série existent déjà"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Sélectionner l'article de stock à installer"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Quantité à installer"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Saisir la quantité d'articles à installer"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Ajouter une note de transaction (facultatif)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "La quantité à installer doit être d'au moins 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "L'article en stock n'est pas disponible"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "La pièce sélectionnée ne figure pas dans la nomenclature"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "La quantité à installer ne doit pas dépasser la quantité disponible"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Emplacement de destination de l'élément désinstallé"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Sélectionner la pièce à convertir en article de stock"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "La partie sélectionnée n'est pas une option valide pour la conversion"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Impossible de convertir un article de stock auquel un SupplierPart a été attribué"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Code d'état de l'article en stock"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Sélectionner les articles en stock pour modifier leur statut"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Aucun article en stock n'a été sélectionné"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sous-localisations"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Emplacement du stock mère"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "La pièce doit être vendable"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "L'article est affecté à une commande client"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "L'article est attribué à un ordre de fabrication"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Affectation d'articles en stock par le client"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "L'entreprise sélectionnée n'est pas un client"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Notes d'affectation des stocks"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Une liste des articles en stock doit être fournie"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notes sur les fusions d'actions"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Autoriser les fournisseurs non concordants"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permettre la fusion d'articles en stock avec des pièces de fournisseurs différents"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Autoriser la non-concordance des statuts"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Permettre la fusion d'articles en stock ayant des codes de statut différents"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Au moins deux articles en stock doivent être fournis"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Pas de changement"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Valeur de la clé primaire StockItem"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "L'article n'est plus en stock"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Notes sur les transactions boursières"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Numéro de série suivant"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Numéro de série précédent"
@@ -9458,150 +9758,158 @@ 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"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administrateur"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Bons de commande"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Ventes"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Commandes de retour"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nom d'utilisateur"
diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po
index bdc613530f..08a056a60a 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Language: he_IL\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr ""
@@ -104,13 +105,13 @@ msgstr "הזן תאריך סיום"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr ""
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "תיאור"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "תיאור (לא חובה)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "המספר חייב להיות תקין"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "מטבע"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "מקור הבנייה"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "רכיב"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "מקט"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "בחר רכיב לבנייה"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "כמות בניה"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "קישור חיצוני"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "כמות"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "מספרים סידוריים"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "בהמתנה"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "ייצור"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "מבוטל"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "הושלם"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "קישור"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "קובץ מצורף"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "קובץ חסר"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "חסר קישור חיצוני"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "בחר קובץ לצירוף"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "הערה"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "נשלח"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "אבד"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "שם משתמש"
diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po
index 908ad8e3c1..e619beab0a 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Hindi\n"
"Language: hi_IN\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr ""
@@ -104,13 +105,13 @@ msgstr "तारीख दर्ज करें"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr ""
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po
index 2d827d6845..85c71f3958 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Language: hu_HU\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "{original} átváltása {unit}-ra sikertelen"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Nem megfelelő mennyiség"
@@ -104,13 +105,13 @@ msgstr "Dátum megadása"
msgid "Invalid decimal value"
msgstr "Érvénytelen decimális érték"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Megjegyzések"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Leírás"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Leírás (opcionális)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Pénznem"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Rendelés állapota"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Szülő gyártás"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Változatokkal együtt"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Változatokkal együtt"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Változatokkal együtt"
msgid "Part"
msgstr "Alkatrész"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategória"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Hozzám rendelt"
@@ -653,374 +641,365 @@ 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:241
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:260
msgid "Max Date"
msgstr "Eddig a dátumig"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Fa kihagyása"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Fogyóeszköz"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcionális"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Gyártmány"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Követett"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Ellenőrizhető"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Befejezetlen rendelés"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Lefoglalva"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Felhasználva"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Rendelve"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr "Gyártás nem található"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Gyártási utasítás"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Hely"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Kimenet"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Szűrés a kimeneti készlet tétel azonosítójára. Használj 'null'-t ha a be nem épített gyártási tételeket keresed."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Gyártási utasítások"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Az alkatrészjegyzék még nincs jóváhagyva"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Nem lehet inaktív alkatrészre Gyártást kezdeményezni"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Nem lehet lezáratlan alkatrészre Gyártást kezdeményezni"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Gyártási rendeléseket kizárólag beszerezhető alkatrészekkel lehet külső forrásból teljesíteni"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Meg kell adni felelős felhasználót vagy csoportot"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Gyártási rendelés alkatrész nem változtatható"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Céldátumnak a kezdeti dátum után kell lennie"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Gyártási utasítás azonosító"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Azonosító"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Gyártás rövid leírása (opcionális)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Gyártási megrendelés, amelyhez ez a gyártás hozzá van rendelve"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Válassz alkatrészt a gyártáshoz"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Vevői rendelés azonosító"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Vevői rendelés, amelyhez ez a gyártás tartozik"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Forrás hely"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Külső gyártás"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Ez a gyártási rendelés külsőleg teljesül"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Cél hely"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Válassz helyet ahol a kész tételek tárolva lesznek"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Gyártási mennyiség"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Gyártandó készlet tételek száma"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Kész tételek"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Elkészült készlet tételek száma"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Gyártási állapot"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Gyártás státusz kód"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Batch kód"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Létrehozás dátuma"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Gyártás kezdeti dátuma"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Gyártási rendelés ütemezett kezdeti dátuma"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Befejezés cél dátuma"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Befejezés dátuma"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "elkészítette"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Indította"
-#: build/models.py:402
+#: build/models.py:401
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:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Felelős"
-#: build/models.py:412
+#: build/models.py:419
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:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Külső link"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link külső URL-re"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Priorítás"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Gyártási utasítás priorítása"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Projektszám"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Projekt kód a gyártáshoz"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "A gyártási rendelés nem befejezhető amíg nyitott al-gyártások vannak"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "A gyártási rendelés nem befejezhető amíg hiányos a kimenet"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "A gyártási foglalások teljesítése háttérfeladat elvégzése nem sikerült"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "A {build} gyártási utasítás elkészült"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Gyártási utasítás elkészült"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nincs gyártási kimenet megadva"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Gyártási kimenet már kész"
-#: build/models.py:1022
+#: build/models.py:960
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:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Mennyiségnek nullánál többnek kell lennie"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
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:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "A lefoglalt készletelemek még gyártás alatt vannak"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Gyártási Rendelés Sor Tétel"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Gyártás objektum"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,452 +1011,455 @@ msgstr "Gyártás objektum"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Mennyiség"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Gyártáshoz szükséges mennyiség"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Felhasznált készlet mennyisége"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie"
-#: build/models.py:1976
+#: build/models.py:1915
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:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Készlet túlfoglalva"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Készlet tétel"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Forrás készlet tétel"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Beépítés ebbe"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Cél készlet tétel"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Gyártási Szint"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Alkatrész neve"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Gyártás kimenet"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Gyártási kimenet nem egyezik a szülő gyártással"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Kimeneti alkatrész nem egyezik a gyártási utasításban lévő alkatrésszel"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Ez a gyártási kimenet már elkészült"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Add meg a mennyiséget a gyártás kimenetéhez"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Sorozatszámok"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Legyártott készlet helye"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Sorozatszámok automatikus hozzárendelése"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "A gyártási kimenetek listáját meg kell adni"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Selejtezet gyártási kimenetek helye"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Foglalások törlése"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Selejtezett kimenetek foglalásainak felszabadítása"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Selejtezés oka"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "A kész gyártási kimenetek helye"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Hiányos foglalás elfogadása"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Kimenetek befejezése akkor is ha a készlet nem\n"
"lett teljesen lefoglalva"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Lefoglalt készlet felhasználása"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Az összes ehhez a gyártáshoz lefoglalt készlet felhasználása"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Befejezetlen kimenetek törlése"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "A nem befejezett gyártási kimenetek törlése"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Nem engedélyezett"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Gyártásban fel lett használva"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Foglalás felszabadítása a készre jelentés előtt"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Túlfoglalt készlet"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Hogyan kezeljük az gyártáshoz rendelt egyéb készletet"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Pár készlet tétel túl lett foglalva"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Kiosztatlanok elfogadása"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a gyártási utastáshoz"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "A szükséges készlet nem lett teljesen lefoglalva"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Befejezetlenek elfogadása"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Fogadd el hogy a szükséges számú gyártási kimenet nem lett elérve"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Szükséges gyártási mennyiség nem lett elérve"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "A Gyártásnak nyitott leszármazott Gyártása van"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "A Gyártásnak folyamatban kell lennie"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Gyártás sor"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Gyártás kimenet"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "A gyártási kimenetnek ugyanarra a gyártásra kell mutatnia"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Gyártás sor tétel"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "A tételnek kell legyen készlete"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Rendelkezésre álló mennyiség ({q}) túllépve"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrészek lefoglalásához"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "A lefoglalandó tételeket meg kell adni"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Készlet hely ahonnan az alkatrészek származnak (hagyd üresen ha bárhonnan)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Hely kizárása"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Készlet tételek kizárása erről a kiválasztott helyről"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Felcserélhető készlet"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "A különböző helyeken lévő készlet egyenrangúan felhasználható"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Készlet helyettesítés"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Helyettesítő alkatrészek foglalásának engedélyezése"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Opcionális tételek"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Opcionális tételek lefoglalása a gyártáshoz"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "Összes elem"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "Nem követett tételek"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "Követett tételek"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "Tétel típusa"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "Válasszon tétel típust az automatikus foglaláshoz"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Alkatrészjegyzék Hivatkozás"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "Alkatrészjegyzék Cikk Azonosító"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Alkatrészjegyzék Alkatrész Név"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "Beépítés helye"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Gyártás"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Beszállítói alkatrész"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Lefoglalt mennyiség"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Gyártási Hivatkozás"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Alkatrész kategória Neve"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Követésre kötelezett"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Örökölt"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Változatok"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Alkatrészjegyzék tétel"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Gyártásban"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Gyártás Ütemezve"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Külső raktárkészlet"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Elérhető készlet"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Elérhető Helyettesítő Készlet"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Elérhető Készlet Változatokból"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Megjegyzés a készletfelhasználáshoz"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Gyártási tételnek a megfelelő gyártási rendelésre kell mutatnia"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Dupla gyártási tétel lefoglalás"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Gyártási sornak a megfelelő gyártási rendelésre kell mutatnia"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Duplikált gyártási sor foglalás"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Legalább egy tétel vagy sor megadása kötelező"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Függőben"
@@ -1486,52 +1468,69 @@ msgid "Production"
msgstr "Folyamatban"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Felfüggesztve"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Törölve"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Kész"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "A {build} gyártási utasítás elkészült"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Gyártási utasítás elkészült"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "A gyártási utasításhoz készlet szükséges"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "A {build} gyártási rendelésnek további készletre van szüksége"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Késésben lévő gyártás"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "A {bo} gyártás most már késésben van"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Ez egy hivatkozás"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Ez egy állomány"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "A felhasználó nem jogosult ezen melléklet törlésére"
@@ -1555,794 +1554,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Frissítve"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Legutóbbi frissítés időpontja"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Frissítette"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Az objektumot utoljára módosította"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Egyedi projektszám"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projekt leírása"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Beállítási kulcs"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Beállítás értéke"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "Az érték bináris kell legyen"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Az érték egész szám kell legyen"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Az értéknek számnak kell lennie"
-#: common/models.py:900
+#: common/models.py:906
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:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Ár"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Végpont"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Végpont ahol ez a webhook érkezik"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "Webhook neve"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Aktív-e ez a webhook"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token a hozzáféréshez"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Titok"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Megosztott titok a HMAC-hoz"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Üzenet azonosító"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Egyedi azonosító ehhez az üzenethez"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Kiszolgáló"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Kiszolgáló ahonnan ez az üzenet érkezett"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Fejléc"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Üzenet fejléce"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Törzs"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Üzenet törzse"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Végpont amin ez az üzenet érkezett"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Dolgozott rajta"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Befejeződött a munka ezzel az üzenettel?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Azonosító"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Cím"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Közzétéve"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Szerző"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Összefoglaló"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Elolvasva"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Elolvasva?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Képfájl"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "A képhez tartozó model típus"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "A képhez tartozó model azonosító"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Egyedi mértékegység"
-#: common/models.py:1832
+#: common/models.py:1838
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:1853
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:1872
msgid "Unit name"
msgstr "Egység neve"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Szimbólum"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Opcionális mértékegység szimbólum"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definíció"
-#: common/models.py:1881
+#: common/models.py:1887
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:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Melléklet"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Hiányzó fájl"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Hiányzó külső link"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Modell típusa"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Képhez tartozó model típus"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Válaszd ki a mellekelni kívánt fájlt"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Megjegyzés"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Melléklet megjegyzés"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Feltöltés dátuma"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "A fájl feltöltésének dátuma"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Fájl mérete"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Fájlméret bájtban"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "A melléklet model típusa érvénytelen"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Egyedi Állapot"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Egyedi Állapotok"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Hivatkozott Állapot Készlet"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Logikai kulcs"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Érték"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Címke"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Szín"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "A felöleten megjelenő szín"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "A Model amihez ez az állapot tartozik"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Modelt választani kötelező"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Kulcsot választani kötelező"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Logikai kulcsot választani kötelező"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
msgid "Valid reference status class must be provided"
msgstr "Helyes hivatkozási állapot osztályt kell megadni"
-#: common/models.py:2192
+#: common/models.py:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Választéklista"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Választéklisták"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Választéklista neve"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Választéklista leírása"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Lezárt"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Választéklista lezárva?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Választéklista használható?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Forrás plugin"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Választéklista szolgáltató plugin"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Forrás szöveg"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Alapértelmezett bejegyzés"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Létrehozva"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Utoljára módosítva"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Választéklista bejegyzés"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Választéklista bejegyzések"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
msgid "Value of the selection list entry"
msgstr "Választéklista bejegyzés értéke"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Választéklista bejegyzés felirata"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Választéklista bejegyzés leírása"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Választéklista bejegyzés aktív?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Paraméter sablon"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Paraméter Sablonok"
-#: common/models.py:2479
+#: common/models.py:2655
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:2660
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:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "A lehetőségek egyediek kell legyenek"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "A paraméter sablon nevének egyedinek kell lennie"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "Célmodell típusa ehhez a paramétersablonhoz"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Paraméter neve"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Mértékegység"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Paraméter mértékegysége"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Paraméter leírása"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Jelölőnégyzet"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Ez a paraméter egy jelölőnégyzet?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Lehetőségek"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr "A paraméter választéklistája"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Engedélyezve"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Ez a paramétersablon engedélyezett?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Paraméter"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Paraméterek"
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Érvénytelen modelltípus megadva a paraméterhez"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "Modell ID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Paraméter sablon"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Adat"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Megjegyzés"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Opcionális megjegyzés mező"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Vonalkód beolvasás"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Vonalkód adat"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Időbélyeg"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Vonalkód beolvasás dátuma és ideje"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontextus"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Vonalkód olvasás kontextus adat"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Válasz"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Eredmény"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Vonalkód olvasás sikeres volt?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Hiba történt"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "E-mail üzenet"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "E-mail üzenetek"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Bejelentve"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Elküldve"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Megbukott"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Kiszállítva"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Megerősítve"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Bejövő"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Kimenő"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Nincs válasz"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Kiszállítás követése"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Olvasási visszaigazolás"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Kattintások nyomkövetése"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Globális ID"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "Szál ID"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Szál"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Prioritás"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Email szál"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Email szálak"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Üzenetlánc egyedi azonosítója"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Belső kezdés"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Ez az üzenetlánc belül indult?"
-#: common/models.py:3200
+#: common/models.py:3376
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:3381
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 +2404,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:609
msgid "Items Received"
msgstr "Készlet érkezett"
@@ -2452,25 +2492,25 @@ msgstr "Kulcsszó paraméterek"
msgid "Task keyword arguments"
msgstr "Feladat kulcsszó paraméterek"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Modell típusa"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "A felhasználónak nincs joga létrehozni vagy módosítani ehhez a modelhez tartozó mellékleteket"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Választéklista lezárva"
@@ -2602,13 +2642,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "nap"
@@ -2621,1030 +2661,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Frissítés keresés gyakorisága"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatikus biztonsági mentés"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automata biztonsági mentés gyakorisága"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Feladat törlési gyakoriság"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Hibanapló törlési gyakoriság"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Értesítés törlési gyakoriság"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "Email törlési gyakoriság"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Email napló védett"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
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:363
msgid "Barcode Support"
msgstr "Vonalkód támogatás"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Vonalkód olvasás eredmények tárolása"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
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:376
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:381
msgid "Barcode Input Delay"
msgstr "Vonalkód beadási késleltetés"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Webkamerás vonalkód olvasás"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Vonalkód Adat Megjelenítése"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Vonalkód Generáló Plugin"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Alkatrész változatok"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr "Csak Összeállítás Verzió"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
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:424
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:425
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:430
msgid "IPN Regex"
msgstr "IPN reguláris kifejezés"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Többször is előforduló IPN engedélyezése"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "IPN szerkesztésének engedélyezése"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Alkatrészjegyzék adatok másolása"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Alkatrész paraméterek másolása"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Alkatrész teszt adatok másolása"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kategória paraméter sablonok másolása"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Alkatrészek alapból sablon alkatrészek legyenek"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Összetevő"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Beszerezhető"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Értékesíthető"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Alkatrészek alapból eladhatók legyenek"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuális"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Alkatrészek alapból virtuálisak legyenek"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Kapcsolódó alkatrészek megjelenítése"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Kezdeti készlet adatok"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Kezdeti beszállítói adatok"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Alkatrész név megjelenítés formátuma"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Alkatrész kategória alapértelmezett ikon"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Áraknál használt tizedesjegyek min. száma"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Áraknál használt tizedesjegyek max. száma"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Beszállítói árazás használata"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Beszerzési előzmények felülbírálása"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Készlet tétel ár használata"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Készlet tétel ár kora"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Alkatrészváltozat árak használata"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Csak az aktív változatokat"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Árazás automatikus frissítése"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Árazás újraszámítás gyakoriság"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Belső árak"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Alkatrészekhez belső ár engedélyezése"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Belső ár felülbírálása"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr "Nulla mennyiség engedélyezése az anyagjegyzékben"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Címke nyomtatás engedélyezése"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Címke kép DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Riportok engedélyezése"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Riportok előállításának engedélyezése"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Debug mód"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Jelentési hibák naplózása"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Alapértelmezett lapméret a PDF riportokhoz"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Csak választható mértékegységek"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globálisan egyedi sorozatszámok"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Kimerült készlet törlése"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Batch kód sablon"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Készlet lejárata"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
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:736
msgid "Sell Expired Stock"
msgstr "Lejárt készlet értékesítése"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
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:742
msgid "Stock Stale Time"
msgstr "Álló készlet ideje"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Lejárt készlet gyártása"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
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:757
msgid "Stock Ownership Control"
msgstr "Készlet tulajdonosok kezelése"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Hely alapértelmezett ikon"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Beépített készlet megjelenítése"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
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:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Lehet Hiányzó Készletet Mozgatni"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Gyártási utasítás azonosító minta"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Szükséges Aktív Alkatrész"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Elvárás a Lezárt Alkatrész"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Jóváhagyott Alkatrészjegyzék Kötelező"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Leszármazott Gyártásoknak Lezártnak Kell Lennie"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Külső Gyártási Rendelések"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Engedélyezze a külső gyártási rendelés funkciót"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blokkolás a tesztek sikeres végrehajtásáig"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Visszavétel engedélyezése"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Visszavételek engedélyezése a felületen"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Visszavétel azonosító minta"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Szükséges minta a visszavétel azonosító mező előállításához"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Befejezett visszavétel szerkesztése"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Visszavétel szerkesztésének engedélyezése befejezés után"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Vevői rendelés azonosító minta"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Vevői rendeléshez alapértelmezett szállítmány"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Befejezett vevői rendelés szerkesztése"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Szállítmány Ellenőrzést Igényel"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Megakadályozza a szállítmányok befejezését, amíg a tételeket nem ellenőrizték"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Leszállított Rendelések Készre jelölése"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Leszállítottnak jelölt Értékesítési rendelések automatikusan Kész-re lesznek állítva, a \"Leszállított\" állapot átugrásával"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Beszerzési rendelés azonosító minta"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Befejezett beszerzési rendelés szerkesztése"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Jelenlegi pénznem"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Beszerzési rendelések automatikus befejezése"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Elfelejtett jelszó engedélyezése"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Regisztráció engedélyezése"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "SSO engedélyezése"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "SSO engedélyezése a bejelentkező oldalon"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "SSO regisztráció engedélyezése"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "SSO csoport szinkronizálás engedélyezése"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "SSO csoport kulcs"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "SSO csoport hozzárendelés"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
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:1036
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:1042
msgid "Email required"
msgstr "Email szükséges"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "SSO felhasználók automatikus kitöltése"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Email kétszer"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Jelszó kétszer"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Engedélyezett domainek"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Csoport regisztráláskor"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Többfaktoros hitelesítés kényszerítése"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Pluginok ellenőrzése indításkor"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Plugin frissítések ellenőrzése"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "URL integráció engedélyezése"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Navigációs integráció engedélyezése"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "App integráció engedélyezése"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
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:1130
msgid "Enable schedule integration"
msgstr "Ütemezés integráció engedélyezése"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Esemény integráció engedélyezése"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Interfész integráció engedélyezése"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Email integráció engedélyezése"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Projektszámok engedélyezése"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Külső helyek nélkül"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Automatikus leltár időpontja"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr "Készlettörténet törlési gyakoriság"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Felhasználók teljes nevének megjelenítése"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Felhasználói profilok megjelenítése"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Teszt állomás adatok engedélyezése"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr "Gép Ping Engedélyezése"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
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"
@@ -3929,55 +4047,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Letiltva: A teljes kategória elérési út megjelenik tooltipként. Engedélyezve: A teljes kategória elérési út megjelenik szövegként."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Hibariportok fogadása"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Értesítések fogadása a rendszerhibákról"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Utoljára használt nyomtató gépek"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
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/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Minden modell"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "A melléklethez nem tartozik model típus"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Érvénytelen melléklet model típus"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "A legkisebb helyiérték nem lehet nagyobb mint a legnagyobb helyiérték"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "A legnagyobb helyiérték nem lehet kisebb mint a legkisebb helyiérték"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Üres domain nem engedélyezett."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Érvénytelen domain név: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Csupa nagybetűs kell"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Az érték egy változó neve legyen"
@@ -4005,13 +4148,13 @@ 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:510
msgid "Manufacturer"
msgstr "Gyártó"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Cég"
@@ -4051,8 +4194,8 @@ msgstr "Kapcsolattartó telefonszáma"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Névjegy"
@@ -4104,7 +4247,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:574 order/models.py:2410
msgid "Address"
msgstr "Cím"
@@ -4196,12 +4339,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Kiindulási alkatrész"
@@ -4214,12 +4357,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN (Gyártói cikkszám)"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Gyártói cikkszám"
@@ -4243,11 +4386,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Beszállító"
@@ -4255,7 +4398,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:505
msgid "Supplier stock keeping unit"
msgstr "Beszállítói cikkszám"
@@ -4283,16 +4426,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "alap költség"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Csomagolás"
@@ -4308,7 +4451,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "többszörös"
@@ -4332,23 +4475,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:881 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 ""
@@ -4504,7 +4647,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:1175
msgid "Valid"
msgstr "Érvényes"
@@ -4616,7 +4759,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:2367
msgid "Unknown"
msgstr "Ismeretlen"
@@ -4720,7 +4863,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"
@@ -4744,117 +4887,118 @@ 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:132
msgid "Order Reference"
msgstr "Rendelés azonosítója"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Kintlévő"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Van projektszáma"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Készítette"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Ez előtt létrehozva"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Létrehozva ez után"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Van kezdeti dátum"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Kezdeti dátum ez előtt"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Kezdeti dátum ez után"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Van céldátum"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Céldátum ez előtt"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Céldátum ez után"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Van árazás"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Ez előtt befejezve"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Befejezve ez után"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Rendelés"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "A rendelés teljesítve"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Belső alkatrész"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "A rendelés függőben"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Kész"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Van kiszállítás"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4862,774 +5006,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Visszavétel"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Teljes ár"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "A rendelés teljes ára"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Rendelés pénzneme"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Egy a rendelés le van zárva és nem lehet módosítani"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "A kezdeti dátumnak meg kell előznie a céldátumot"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "A cím nem egyezik a kiválasztott vállalattal"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Rendelés leírása (opcionális)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link külső weboldalra"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Kezdés dátuma"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Cél dátum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Várt teljesítési dátuma a megrendelésnek. Ezután már késésben lévőnek számít majd."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Kiállítás dátuma"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Kiállítás dátuma"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "Frissítve"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Kapcsolattartó ehhez a rendeléshez"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Állapot"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Beszerzési rendelés állapota"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Cég akitől a tételek beszerzésre kerülnek"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Beszállítói azonosító"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Beszállítói rendelés azonosító kód"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "érkeztette"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Rendelés teljesítési dátuma"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Cél"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Beérkezett tételek tárolója"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Az alkatrész beszállítója meg kell egyezzen a beszerzési rendelés beszállítójával"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Sortétel nem egyezik a beszerzési megrendeléssel"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Sortételen hiányzik a kapcsolódó alkatrész"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Mennyiség pozitív kell legyen"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr "Értékesítési rendelés állapot"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Vevői azonosító "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Kiszállítás dátuma"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "szállította"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Rendelés már teljesítve"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Rendelés már visszavonva"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Tétel mennyiség"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Sortétel azonosító"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Sortétel megjegyzései"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Sortétel leírása (opcionális)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "További kontextus ehhez a sorhoz"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Egységár"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Vevői Rendelés Sortétel"
-#: order/models.py:1939
+#: order/models.py:1995
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:2003
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:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Beszállítói alkatrész"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Beérkezett"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Beszerzési ár"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Beszerzési egységár"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Vevői Rendelés Extra Sor"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Vevői Rendelés Sortétel"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Eladási ár"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Eladási egységár"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Kiszállítva"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Szállított mennyiség"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Vevői Rendelés Szállítása"
-#: order/models.py:2305
+#: order/models.py:2375
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:2411
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:2419
msgid "Date of shipment"
msgstr "Szállítás dátuma"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Szállítási dátum"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Kézbesítés dátuma"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Ellenőrizte"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Szállítmány"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Szállítmány száma"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Nyomkövetési szám"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Szállítmány nyomkövetési információ"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Számlaszám"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Hozzátartozó számla referencia száma"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Szállítmány már elküldve"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
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:2586
msgid "Sales Order Extra Line"
msgstr "Vevői Rendelés Extra Sor"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Vevői rendeléshez foglalások"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Készlet tétel nincs hozzárendelve"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Sor"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Tétel"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
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:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Készlet foglalási mennyiség megadása"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Visszavétel azonosító"
-#: order/models.py:2777
+#: order/models.py:2847
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:2860
msgid "Return order status"
msgstr "Visszavétel állapota"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Visszavétel sortétel"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Készlettételt meg kell adni"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Visszavétel mennyisége meghaladja a készletet"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
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:3135
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:3150
msgid "Received Date"
msgstr "Visszavétel dátuma"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Kimenetel"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Sortétel végső kimenetele"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Visszavétel extra tétel"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Rendelés azonosító"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "A duplikálandó megrendelés száma"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Sorok másolása"
-#: order/serializers.py:82
+#: order/serializers.py:84
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:90
msgid "Copy Extra Lines"
msgstr "Extra sorok másolása"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Paraméterek másolása"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Sortételek"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Kész sorok"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Rendelés duplikálása"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Rendelés másolás beállításai"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Érvénytelen rendelés ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Beszállító neve"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
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:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "A rendelésben teljesítetlen sortételek vannak"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "A rendelés nem nyitott"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automata árazás"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Beszérzési ár pénzneme"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Elemek összevonása"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU (leltári azonosító)"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Belső cikkszám"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Belső cikkszám"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Beszállítói alkatrészt meg kell adni"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Beszerzési rendelést meg kell adni"
-#: order/serializers.py:784
+#: order/serializers.py:786
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:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Sortétel"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
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:880
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:890
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:898 order/serializers.py:2166
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:905
msgid "Barcode"
msgstr "Vonalkód"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Beolvasott vonalkód"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Sortételt meg kell adni"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "A cél helyet kötelező megadni"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Megadott vonalkódoknak egyedieknek kel lenniük"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Szállítások"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Kész szállítmányok"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Eladási ár pénzneme"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Foglalt tételek"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
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:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Mennyiség pozitív kell legyen"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
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:1824 order/serializers.py:1954
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:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Az alábbi sorozatszámok nem elérhetők"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Visszavétel sortétel"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Sortétel nem egyezik a visszavétellel"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "A sortétel már beérkezett"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Visszaküldési mennyiség"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Sortétel pénzneme"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Elveszett"
@@ -5662,6 +5880,11 @@ msgstr "Visszatérítés"
msgid "Reject"
msgstr "Elutasított"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Kiküldve"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Késésben lévő beszerzés"
@@ -5697,7 +5920,7 @@ msgstr "Csillagozott"
msgid "Filter by starred categories"
msgstr "Csillagozottra szűrés"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Mélység"
@@ -5705,7 +5928,7 @@ msgstr "Mélység"
msgid "Filter by category depth"
msgstr "Kategória mélységre szűrés"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Felső szint"
@@ -5713,7 +5936,7 @@ msgstr "Felső szint"
msgid "Filter by top-level categories"
msgstr "Csúcs készlethelyre szűrés"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Lépcsőzetes"
@@ -5733,75 +5956,79 @@ msgstr "Szülő kategóriára szűrés"
msgid "Exclude sub-categories under the specified category"
msgstr "Az adott kategória alkategóriáinak kihagyása"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Van találat"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Változat-e"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Változat"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Vannak Változatok"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Alkatrészjegyzék ellenőrizve"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Kaszkád Kategóriák"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
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:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Összeállított Alkatrész ellenőrizhető"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Összetevő alkatrész ellenőrizhető"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Használ"
@@ -5810,11 +6037,11 @@ msgstr "Használ"
msgid "Part Category"
msgstr "Alkatrész kategória"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5822,7 +6049,7 @@ msgstr "Alapértelmezett hely"
msgid "Default location for parts in this category"
msgstr "Ebben a kategóriában lévő alkatrészek helye alapban"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Szerkezeti"
@@ -5838,12 +6065,12 @@ msgstr "Alapértelmezett kulcsszavak"
msgid "Default keywords for parts in this category"
msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikon"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikon (opcionális)"
@@ -5863,984 +6090,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Több értékesítése"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Árszámítások gyorstárazásához használt pénznem"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimum alkatrészjegyzék költség"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Összetevők minimum költsége"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maximum alkatrészjegyzék költség"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Összetevők maximum költsége"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimum beszerzési ár"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Eddigi minimum beszerzési költség"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maximum beszerzési ár"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Eddigi maximum beszerzési költség"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimum belső ár"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimum költség a belső ársávok alapján"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maximum belső ár"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maximum költség a belső ársávok alapján"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimum beszállítói ár"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Minimum alkatrész ár a beszállítóktól"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maximum beszállítói ár"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maximum alkatrész ár a beszállítóktól"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimum alkatrészváltozat ár"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Alkatrészváltozatok számolt minimum költsége"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maximum alkatrészváltozat ár"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Alkatrészváltozatok számolt maximum költsége"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimum költség"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Minimum költség felülbírálása"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maximum költség"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Maximum költség felülbírálása"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Számított általános minimum költség"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Számított általános maximum költség"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimum eladási ár"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Minimum eladási ár az ársávok alapján"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maximum eladási ár"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maximum eladási ár az ársávok alapján"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimum eladási költség"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Eddigi minimum eladási ár"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maximum eladási költség"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Eddigi maximum eladási ár"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Leltározható alkatrész"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Tételszám"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Egyedi készlet tételek száma a leltárkor"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Teljes készlet a leltárkor"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Dátum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Leltározva ekkor"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimum készlet érték"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Becsült minimum raktárkészlet érték"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maximum készlet érték"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Becsült maximum raktárkészlet érték"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Alkatrész értékesítési ársáv"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Alkatrész Teszt Sablon"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Teszt név"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Add meg a teszt nevét"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Teszt azonosító"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Egyszerűsített Teszt azonosító"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Teszt leírása"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Adj hozzá egy leírást ehhez a teszthez"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Teszt engedélyezve?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Kötelező"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Szükséges-e hogy ez a teszt sikeres legyen?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Kötelező érték"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Kötelező melléklet"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
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:3956
+#: part/models.py:4080
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:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Szülő alkatrész kiválasztása"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Al alkatrész"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Ez az alkatrészjegyzék tétel opcionális"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Beállítás mennyiség"
-#: part/models.py:4009
+#: part/models.py:4141
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:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Veszteség"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Kerekítési többszörös"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Alkatrészjegyzék tétel azonosító"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Alkatrészjegyzék tétel megjegyzései"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Ellenőrző összeg"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Alkatrészjegyzék sor ellenőrző összeg"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Jóváhagyva"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Ez a BOM tétel jóvá lett hagyva"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Öröklődött"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
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:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Al alkatrészt kötelező megadni"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Alkatrészjegyzék tétel helyettesítő"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Szülő alkatrészjegyzék tétel"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Helyettesítő alkatrész"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "1.rész"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "2.rész"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Válassz kapcsolódó alkatrészt"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Kapcsolati megjegyzés"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "Alkatrész kapcsolat nem hozható létre önmagával"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Már létezik duplikált alkatrész kapcsolat"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Szülő Kategória"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Felsőbb szintű alkatrész kategória"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Alkategóriák"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Eredmények"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
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:305
msgid "File is not an image"
msgstr "A fájl nem kép"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Eredeti alkatrész"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Válassz eredeti alkatrészt a másoláshoz"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kép másolása"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Kép másolása az eredeti alkatrészről"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Alkatrészjegyzék másolása"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
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:442
msgid "Copy Notes"
msgstr "Megjegyzések másolása"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Megjegyzések másolása az eredeti alkatrészről"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Teszt másolása"
-#: part/serializers.py:431
+#: part/serializers.py:450
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:468
msgid "Initial Stock Quantity"
msgstr "Kezdeti készlet mennyiség"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Kezdeti készlet hely"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Add meg a kezdeti készlet helyét"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Gyártói cikkszám"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
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:555
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:840
msgid "Category Name"
msgstr "Kategória neve"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Gyártásban"
-#: part/serializers.py:846
+#: part/serializers.py:870
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:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Készlet tételek"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Verziók"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Nem lefoglalt készlet"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Variánsok Raktárkészlet"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Alkatrész másolása"
-#: part/serializers.py:969
+#: part/serializers.py:997
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:1003
msgid "Initial Stock"
msgstr "Kezdeti készlet"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Kezdeti készlet mennyiség létrehozása"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Beszállító információ"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Kezdeti beszállító adatok hozzáadása"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Kategória paraméterek másolása"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Meglévő kép"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "A meglévő alkatrész képfájl neve"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "A képfájl nem létezik"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
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:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Gyártható"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Gyártásokhoz szükséges"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Gyártási rendelésekhez foglalva"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Értékesítési rendeléshez szükséges"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Értékesítési rendeléshez lefoglalva"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minimum ár"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
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:1501
msgid "Minimum price currency"
msgstr "Minimum ár pénzneme"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maximum ár"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
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:1516
msgid "Maximum price currency"
msgstr "Maximum ár pénzneme"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Frissítés"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Alkatrész árak frissítése"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Szülő összeállítás kiválasztása"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Összetevő alkatrész kijelölése"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
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:2025
msgid "Remove Existing Data"
msgstr "Létező adat törlése"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
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:2031
msgid "Include Inherited"
msgstr "Örököltekkel együtt"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Hibás sorok kihagyása"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Helyettesítő alkatrészek másolása"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
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"
@@ -7092,15 +7363,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"
@@ -7161,7 +7432,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
@@ -7507,20 +7778,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"
@@ -7561,7 +7832,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ő"
@@ -7763,7 +8034,7 @@ msgstr "Csomag plugin"
msgid "Plugin"
msgstr "Bővítmény"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nincs szerző"
@@ -8022,7 +8293,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"
@@ -8066,112 +8337,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"
@@ -8226,13 +8497,10 @@ msgstr "Szükséges alapanyagok"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Alkatrész képe"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Kiküldve"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Szükséges ehhez"
@@ -8268,7 +8536,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Sorozatszám"
@@ -8293,7 +8561,7 @@ msgstr "Készlet tétel teszt riport"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Beépített tételek"
@@ -8326,6 +8594,10 @@ msgstr "Nincs eredmény (szükséges)"
msgid "No result"
msgstr "Nincs eredmény"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8354,491 +8626,499 @@ msgstr "part_image elem csak alkatrész példánynál használható"
msgid "company_image tag requires a Company instance"
msgstr "company_image elem csak cég példánynál használható"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Hely mélységre szűrés"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Csúcs készlethelyre szűrés"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Szűrt eredmények tartalmazzák az alhelyeket"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Szülő hely"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Szülő helyre szűrés"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Alkatrész neve (kisbetű/nagybetű nem számít)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Az alkatrész neve tartalmazza (kisbetű/nagybetű nem számít)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Alkatrész neve (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Alkatrész IPN (kisbetű/nagybetű nem számít)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Alkatrész IPN tartalmazza (kisbetű/nagybetű nem számít)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Alkatrész IPN (regexp)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Minimális készlet"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Maximális készlet"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Státuszkód"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Külső hely"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Felhasználva Gyártási Rendelésben"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Más készlettételbe beépítve"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Alkatrész fa"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Módosítva ezelőtt"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Frissítve ez után"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Leltárazva ezelőtt"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Leltárazva ezután"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Lejárat előtt"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Lejárat után"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Állott"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Adj meg egy készlettétel azonosítót - PK-t - hogy a tétel és leszármazottai kihagyásához"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Készlethelyek alábontása"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Az al-készlethelyeket is beleértve"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Készlethely azonosító alapján szűrés vagy a 'null'-ra"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Mennyiség megadása kötelező"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Egy érvényes alkatrészt meg kell adni"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "A megadott beszállítói alkatrész nem létezik"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Beépítettek Belefoglalása"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Ha igaz, tartalmazza a megadott készlettétel alá beépített tételek teszteredményeit"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Szűrés numerikus készlettétel azonosító szerint"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "A(z) {id} azonosítójú készlettétel nem létezik"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Készlethely típus"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Készlethely típusok"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Készlet hely"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Készlethelyek"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Tulajdonos"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Tulajdonos kiválasztása"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Külső"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Ez egy külső készlethely"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Helyszín típusa"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Tárolóhely típus"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "a(z) {field} nem létezik"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Alkatrész kiválasztása kötelező"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "A tétel nem tartozhat saját magához"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Szülő készlet tétel"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Kiindulási alkatrész"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Beépítve ebbe"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
msgid "Serial number for this item"
msgstr "Sorozatszám ehhez a tételhez"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Batch kód ehhez a készlet tételhez"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Készlet mennyiség"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Forrás gyártás"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Gyártás ehhez a készlet tételhez"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Felhasználva ebben"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Felhasználva ebben a gyártásban"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Forrás beszerzési rendelés"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Beszerzés ehhez a készlet tételhez"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Cél vevői rendelés"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Törlés ha kimerül"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Alkatrésszé alakítva"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Mennyiség meghaladja az elérhető készletet"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Az alkatrész nem követésre kötelezett"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Mennyiség egész szám kell legyen"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr "Sorozatszámokat listában kell megadni"
-#: stock/models.py:1918
+#: stock/models.py:1979
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:1997
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:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Ez a Teszt sablon nem létezik"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "A készlet tétel más tételeket tartalmaz"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Készlet tétel gyártás alatt"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Duplikált készlet tételek vannak"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Készlet tételek állapotainak egyeznie kell"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Készlettörténet"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Bejegyzés megjegyzései"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Készlet Tétel Ellenőrzés Eredménye"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Ehhez a teszthez meg kell adni értéket"
-#: stock/models.py:3030
+#: stock/models.py:3103
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:3108
msgid "Invalid value for this test"
msgstr "A teszt eredménye érvénytelen"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Teszt eredménye"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Teszt kimeneti értéke"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Teszt eredmény melléklet"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Tesztek megjegyzései"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Teszt állomás"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Elkezdődött"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "A teszt indításának időpontja"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Befejezve"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "A teszt befejezésének időpontja"
@@ -8914,214 +9194,234 @@ msgstr "Csomagolási mennyiség használata: a megadott mennyiség ennyi csomag"
msgid "Use pack size"
msgstr "Csomagméret használata"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Írd be a sorozatszámokat az új tételekhez"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Beszállítói Cikkszám"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Lejárt"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Gyermek tételek"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Nyilvántartott tételek"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Készlet tétel beszerzési ára, per darab vagy csomag"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Add meg hány készlet tételt lássunk el sorozatszámmal"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "Nincsen készlettétel megadva"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "A mennyiség nem lépheti túl a rendelkezésre álló készletet ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Cél készlet hely"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "A sorozatszámok már léteznek"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Válaszd ki a beépítésre szánt készlet tételt"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Beépítendő mennyiség"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Adja meg a beépítendő mennyiséget"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Tranzakció megjegyzés hozzáadása (opcionális)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "A beépítendő mennyiség legalább 1 legyen"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Készlet tétel nem elérhető"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "A beépítendő mennyiség nem haladhatja meg az elérhető mennyiséget"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Cél hely a kiszedett tételeknek"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Válassz alkatrészt amire konvertáljuk a készletet"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Készlet tétel hozzárendelt beszállítói alkatrésszel nem konvertálható"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Készlet tétel státusz kódja"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Válaszd ki a státuszváltásra szánt készlet tételeket"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Nincs készlet tétel kiválasztva"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Alhelyek"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Felsőbb szintű készlet hely"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Az alkatrésznek értékesíthetőnek kell lennie"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "A tétel egy vevő rendeléshez foglalt"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "A tétel egy gyártási utasításhoz foglalt"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Vevő akihez rendeljük a készlet tételeket"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "A kiválasztott cég nem egy vevő"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Készlet hozzárendelés megjegyzései"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "A készlet tételek listáját meg kell adni"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Készlet összevonás megjegyzései"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Nem egyező beszállítók megengedése"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Különböző beszállítói alkatrészekből származó készletek összevonásának engedélyezése"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Nem egyező állapotok megjelenítése"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Különböző állapotú készletek összevonásának engedélyezése"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Legalább két készlet tételt meg kell adni"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Nincs változás"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Készlet tétel elsődleges kulcs értéke"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Készlettétel nincs készleten"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Készlettétel már készleten van"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Mennyiség nem lehet negatív"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Készlet tranzakció megjegyzései"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Meglévő készletbe olvasztás"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Visszaérkezett tételek beolvasztása a készlettételekbe ha lehetséges"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Következő sorozatszám"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Előző Sorozatszám"
@@ -9459,150 +9759,158 @@ 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"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Adminisztrátor"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Beszerzési rendelések"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Vevői rendelések"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Visszavételek"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Felhasználónév"
diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po
index 897c2dbf2d..238909f14e 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Indonesian\n"
"Language: id_ID\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Jumlah yang diberikan tidak valid"
@@ -104,13 +105,13 @@ msgstr "Masukkan tanggal"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Catatan"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Keterangan"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Keterangan (opsional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Mata Uang"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Produksi Induk"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Bagian"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Pesanan harus dibatalkan sebelum dapat dihapus"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Order Produksi"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lokasi"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Order Produksi"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referensi Order Produksi"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referensi"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Pilih bagian untuk diproduksi"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referensi Order Penjualan"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Lokasi Sumber"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Lokasi Tujuan"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Pilih lokasi di mana item selesai akan disimpan"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Jumlah Produksi"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Jumlah item stok yang akan dibuat"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Item selesai"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Jumlah stok item yang telah diselesaikan"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Status pembuatan"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Kode status pembuatan"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Kode Kelompok"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Tanggal Pembuatan"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Target tanggal selesai"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Tanggal selesai"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "diselesaikan oleh"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Diserahkan oleh"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Pengguna yang menyerahkan order ini"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Penanggung Jawab"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Tautan eksternal"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Tautan menuju URL eksternal"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Tidak ada hasil produksi yang ditentukan"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Hasil produksi sudah selesai"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Hasil produksi tidak sesuai dengan order produksi"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Jumlah harus lebih besar daripada nol"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Jumlah"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Jumlah harus 1 untuk stok dengan nomor seri"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Item stok teralokasikan terlalu banyak"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Stok Item"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Sumber stok item"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Jumlah stok yang dialokasikan ke produksi"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Pasang ke"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Tujuan stok item"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Hasil Produksi"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Hasil produksi tidak sesuai dengan produksi induk"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Hasil produksi ini sudah diselesaikan"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Hasil produksi tidak dialokasikan sepenuhnya"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Masukkan jumlah hasil pesanan"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Nomor Seri"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Masukkan nomor seri untuk hasil pesanan"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Alokasikan nomor seri secara otomatis"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Daftar hasil pesanan harus disediakan"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Lokasi hasil pesanan yang selesai"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Terima Alokasi Tidak Lengkap"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Tidak diizinkan"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Terima Tidak Teralokasikan"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Terima Tidak Selesai"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Jumlah produksi yang diperlukan masih belum cukup"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Order memiliki hasil produksi yang belum dilengkapi"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Hasil produksi"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Hasil pesanan harus mengarah ke pesanan yang sama"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Item harus tersedia dalam stok"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Jumlah tersedia ({q}) terlampaui"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Item yang dialokasikan harus disediakan"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Lokasi tidak termasuk"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Jangan ambil stok item dari lokasi yang dipilih"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Stok bergantian"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Stok pengganti"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Izinkan alokasi bagian pengganti"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Item tagihan material"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Tertunda"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produksi"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Dibatalkan"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Selesai"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Stok dibutuhkan untuk order produksi"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Harga"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Judul"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Tautan"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Kesimpulan"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Berkas Gambar"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Lampiran"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "File tidak ditemukan"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Tautan eksternal tidak ditemukan"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Pilih file untuk dilampirkan"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Ukuran Berkas"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Label"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Terbuat"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Pilihan"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Aktif"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Respon"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Barang diterima"
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "Hari"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponen"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "Aktifkan Laporan"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
-msgstr "Surel diperlukan"
-
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
+msgstr "Surel diperlukan"
+
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
-msgstr "Aktifkan Integrasi Antarmuka"
+msgid "Enable periodic checks for updates to installed plugins"
+msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr "Aktifkan Integrasi Antarmuka"
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Perusahaan"
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr "Kontak alamat surel"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontak"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Tidak diketahui"
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Selesai"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Total Harga"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "Harga Jual"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Dikirim"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Order ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Salin Baris"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Hilang"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr "Tolak"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Tanggal"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Harga Minimal"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Harga Maksimal"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Perbarui"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Nomor Seri"
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Lampiran perlu diunggah untuk tes ini"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nama Pengguna"
diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po
index 1cf05f6e5c..165885d1ab 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Language: it_IT\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
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
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Quantità inserita non valida"
@@ -104,13 +105,13 @@ msgstr "Inserisci la data"
msgid "Invalid decimal value"
msgstr "Valore decimale non valido"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Note"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descrizione"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descrizione (opzionale)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Stato dell'ordine"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Produzione Genitore"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Includi Varianti"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Includi Varianti"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Includi Varianti"
msgid "Part"
msgstr "Articolo"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categoria"
@@ -605,7 +593,7 @@ msgstr "Categoria"
msgid "Ancestor Build"
msgstr "Produzione Antenata"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Assegnato a me"
@@ -653,374 +641,365 @@ msgstr "Completato prima"
msgid "Completed after"
msgstr "Completato dopo"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "Data minima"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Data massima"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Escludi Albero"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "La produzione deve essere annullata prima di poter essere eliminata"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumabile"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opzionale"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Assemblaggio"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Monitorato"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testabile"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Ordine In Corso"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Allocato"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Utilizzato"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Ordinato"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Ordine di Produzione"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Posizione"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Output"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Filtra per ID articolo stock di output. Usa 'null' per trovare elementi di produzione disinstallati."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Ordini di Produzione"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Assembly BOM non è stato convalidato"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "L'ordine di generazione non può essere creato per una parte inattiva"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Gli ordini di costruzione possono essere eseguiti solo esternamente per gli articoli acquistabili"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "L'utente o il gruppo responsabile deve essere specificato"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "L'ordine di costruzione della parte non può essere cambiata"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "La data di scadenza deve essere successiva alla data d'inizio"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Riferimento Ordine Di Produzione"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Riferimento"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Breve descrizione della build (facoltativo)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Ordine di produzione a cui questa produzione viene assegnata"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Selezionare parte da produrre"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Numero di riferimento ordine di vendita"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Ordine di vendita a cui questa produzione viene assegnata"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Posizione Di Origine"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Build Esterno"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Questo ordine di produzione è eseguito esternamente"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Posizione Della Destinazione"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Quantità Produzione"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Numero di articoli da costruire"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Articoli completati"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Numero di articoli di magazzino che sono stati completati"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Stato Produzione"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Codice stato di produzione"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Codice Lotto"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Data di creazione"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Data inizio produzione"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Data d'inizio programmata per questo ordine di produzione"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Data completamento obiettivo"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Data di completamento"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "Completato da"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Rilasciato da"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Utente che ha emesso questo ordine di costruzione"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsabile"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Utente o gruppo responsabile di questo ordine di produzione"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Collegamento esterno"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link a URL esterno"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Priorità di produzione"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Priorità di questo ordine di produzione"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Codice del progetto"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Codice del progetto per questo ordine di produzione"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Impossibile finalizzare l'ordine di produzione con ordini secondari aperti"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Impossibile finalizzare l'ordine di produzione con articolo incompleti"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Impossibile scaricare l'attività per completare le allocazioni di build"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "L'ordine di produzione {build} è stato completato"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "L'ordine di produzione è stato completato"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nessun output di produzione specificato"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "La produzione è stata completata"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "L'output della produzione non corrisponde all'ordine di compilazione"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "La quantità deve essere maggiore di zero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "La produzione non ha superati tutti i test richiesti"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Elemento di Riga Ordine di Produzione"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Crea oggetto"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Crea oggetto"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Quantità"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Quantità richiesta per l'ordine di costruzione"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Quantità di articoli magazzino consumate"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "La quantità assegnata deve essere maggiore di zero"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "La quantità deve essere 1 per lo stock serializzato"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "L'articolo in giacenza è sovrallocato"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Articoli in magazzino"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Origine giacenza articolo"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Quantità di magazzino da assegnare per la produzione"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Installa in"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destinazione articolo in giacenza"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Livello Produzione"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nome Articolo"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Genera Output"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "L'output generato non corrisponde alla produzione principale"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "L'output non corrisponde alle parti dell'ordine di produzione"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Questa produzione è stata già completata"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Questo output non è stato completamente assegnato"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Inserisci la quantità per l'output di compilazione"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Quantità totale richiesta per articoli rintracciabili"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Codice Seriale"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Posizione dello stock per l'output della produzione"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Numeri di Serie Assegnazione automatica"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "I seguenti numeri di serie sono già esistenti o non sono validi"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Deve essere fornito un elenco dei risultati di produzione"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Posizione dello stock per l'output di produzione rimosso"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Scarta Assegnazioni"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Motivo dell'eliminazione degli output di compilazione"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Posizione per gli output di build completati"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Accetta Assegnazione Incompleta"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Completa l'output se le scorte non sono state interamente assegnate"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consuma Giacenze Allocate"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consuma tutte le scorte che sono già state assegnate a questa produzione"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Rimuovi Output Incompleti"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Elimina gli output di produzione che non sono stati completati"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Non permesso"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Accetta come consumato da questo ordine di produzione"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Non assegnare prima di aver completato questo ordine di produzione"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Giacenza in eccesso assegnata"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Come si desidera gestire gli elementi extra giacenza assegnati all'ordine di produzione"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Accetta Non Assegnato"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegnati a questo ordine di produzione"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "La giacenza richiesta non è stata completamente assegnata"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Accetta Incompleta"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Accetta che il numero richiesto di output di produzione non sia stato completato"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "La quantità di produzione richiesta non è stata completata"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "L'ordine di costruzione deve essere in stato di produzione"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "L'ordine di produzione ha output incompleti"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linea di produzione"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Genera Output"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "L'output di produzione deve puntare alla stessa produzione"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Articolo linea di produzione"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "L'articolo deve essere disponibile"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Quantità disponibile ({q}) superata"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "L'output di produzione deve essere specificato per l'ubicazione delle parti tracciate"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Deve essere indicata l'allocazione dell'articolo"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Posizione dello stock in cui le parti devono prelevate (lasciare vuoto per prelevare da qualsiasi luogo)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Escludi Ubicazione"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Escludi gli elementi stock da questa ubicazione selezionata"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Scorte Intercambiabili"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Gli elementi in magazzino in più sedi possono essere utilizzati in modo intercambiabile"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Sostituisci Giacenze"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Consenti l'allocazione delle parti sostitutive"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Articoli Opzionali"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Riferimento BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "Identificativo dell'Articolo BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nome Articolo BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Costruzione"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Articolo Fornitore"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Quantità assegnata"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Riferimento Ordine Di Costruzione"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nome Categoria Articolo"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Tracciabile"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Ereditato"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Consenti Le Varianti"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Distinta base (Bom)"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "In Produzione"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Pianificato per la produzione"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Scorte esterne"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Disponibilità in magazzino"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Disponibili scorte alternative"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Disponibili varianti delle scorte"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "La quantità consumata supera la quantità assegnata"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Note facoltative per il consumo di magazzino"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Duplica l'allocazione degli articoli da produrre"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "La riga di produzione deve puntare all'ordine di produzione corretto"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Duplica l'allocazione della riga di produzione"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Deve essere fornita almeno un articolo o riga"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "In attesa"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produzione"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "In Attesa"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Annullato"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Completo"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "L'ordine di produzione {build} è stato completato"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "L'ordine di produzione è stato completato"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Giacenza richiesta per l'ordine di produzione"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "L'ordine di produzione {build} richiede articoli aggiuntivi"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Ordine di produzione in ritardo"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "L'ordine di produzione {bo} è in ritardo"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "È Un Connegamento"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "E' un file"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "L'utente non ha il permesso di eliminare questo allegato"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Aggiornato"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Orario dell'ultimo aggiornamento"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Aggiornato da"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Utente che per ultimo ha aggiornato questo oggetto"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Codice unico del progetto"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descrizione del progetto"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Tasto impostazioni"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valore impostazioni"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Il valore specificato non è un opzione valida"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Il valore deve essere un valore booleano"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Il valore deve essere un intero"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Il valore deve essere un numero valido"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Il valore non supera i controlli di convalida"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Prezzo"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Prezzo unitario in quantità specificata"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Scadenza"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Scadenza in cui questa notifica viene ricevuta"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "È questa notifica attiva"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token per l'accesso"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Segreto"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Segreto condiviso per HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID Messaggio"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identificatore unico per questo messaggio"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Host da cui questo messaggio è stato ricevuto"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Intestazione"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Intestazione di questo messaggio"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Contenuto"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Contenuto di questo messaggio"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Scadenza in cui questo messaggio è stato ricevuto"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Lavorato il"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Il lavoro su questo messaggio è terminato?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titolo"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Collegamento"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Pubblicato"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autore"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Riepilogo"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Letto"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Queste notizie sull'elemento sono state lette?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "File immagine"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Tipo di modello di destinazione per questa immagine"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "ID modello di destinazione per questa immagine"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unità Personalizzata"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Il simbolo dell'unità deve essere univoco"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nome dell'unità"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Simbolo"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Simbolo unità opzionale"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definizione"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definizione unità"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Allegato"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "File mancante"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Link esterno mancante"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Tipo modello"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Tipo di modello di destinazione per l'immagine"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Seleziona file da allegare"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Commento"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Commento allegato"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Data caricamento"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Data di caricamento del file"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Dimensione file"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Dimensioni file in byte"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Tipo di modello specificato per l'allegato non valido"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Stato Personalizzato"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Stati Personalizzati"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Imposta Stato Di Riferimento"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Chiave Logica"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valore"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etichetta"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Colore"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Colore che verrà visualizzato nel frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modello"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Modello a cui questo stato è associato"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Il modello deve essere selezionato"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "La chiave deve essere selezionata"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "La chiave logica deve essere selezionata"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "La chiave deve essere diversa dalla chiave logica"
-#: common/models.py:2186
+#: common/models.py:2362
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:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Elenco Selezioni"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Elenchi di Selezione"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Nome dell'elenco di selezione"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Descrizione della lista di selezione"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Bloccato"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Questa lista di selezione è bloccata?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Questo elenco di selezione può essere utilizzato?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Plugin Sorgente"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Plugin che fornisce l'elenco di selezione"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Stringa Sorgente"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Voce Predefinita"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Creato"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Ultimo aggiornamento"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Voce Lista Selezione"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Voci Lista Selezione"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Elenco di selezione a cui appartiene questa voce"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Valore della voce della lista di selezione"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Etichetta per la voce elenco di selezione"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Descrizione della voce della lista di selezione"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Questa voce della lista di selezione è attiva?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Modello Parametro"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Modelli parametro"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "I parametri della casella di controllo non possono avere unità"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "I parametri della casella di controllo non possono avere scelte"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Le scelte devono essere uniche"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Il nome del modello del parametro deve essere univoco"
-#: common/models.py:2543
+#: common/models.py:2719
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:2725
msgid "Parameter Name"
msgstr "Nome Parametro"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unità"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Unità fisiche per questo parametro"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Descrizione del parametro"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Casella di spunta"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Questo parametro è una casella di spunta?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Scelte"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Scelte valide per questo parametro (separato da virgola)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Lista di selezione per questo parametro"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Abilitato"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Questo modello di parametro è abilitato?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Parametro"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Parametri"
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Tipo di modello specificato per parametro non valido"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "ID Modello"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Modello Parametro"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Dati"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Nota"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Note opzionali elemento"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Scansione Codice A Barre"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Dati del Codice a Barre"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Data e ora"
-#: common/models.py:2864
+#: common/models.py:3040
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:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contesto"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Dati contestuali per la scansione del codice a barre"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Risposta"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Risultato"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "La scansione del codice a barre è riuscita?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Si è verificato un errore"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "Messaggio email"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "Messaggi email"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Annunciato"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Inviato"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Fallito"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Consegnato"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Confermato"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Ricevuti"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "In uscita"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Nessuna risposta"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Traccia La Consegna"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Conferma di lettura"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Tracciare i clic delle email"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "ID Globale"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "ID discussione"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Discussione"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Thread collegato a questo messaggio"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Priorità"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Discussione Email"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Discussioni Email"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Identificatore univoco per questa discussione"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Avviato internamente"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Questa discussione è iniziata internamente?"
-#: common/models.py:3200
+#: common/models.py:3376
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:3381
msgid "Date and time that the thread was last updated"
msgstr "Data e ora in cui la discussione è stata aggiornata"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Elemento ricevuto"
@@ -2451,25 +2491,25 @@ msgstr "Argomenti Parole Chiave"
msgid "Task keyword arguments"
msgstr "Argomenti parole chiave attività"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Tipo di modello"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista di selezione bloccata"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "giorni"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Aggiorna intervallo di controllo"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Backup automatico"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervallo Di Backup Automatico"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervallo Eliminazione Attività"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervallo Di Cancellazione Registro Errori"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervallo Di Cancellazione Notifica"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "Intervallo Eliminazione Email"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Proteggi Log Email"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
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:363
msgid "Barcode Support"
msgstr "Supporto Codice A Barre"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Memorizza Risultati Barcode"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Numero Massimo Scansioni Barcode"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Codice a barre inserito scaduto"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Tempo di ritardo di elaborazione codice a barre"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Codice a Barre Supporto Webcam"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Visualizza dati codice a barre"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Plugin Generazione Codice A Barre"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revisioni Articolo"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Abilita il campo revisione per l'articolo"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Solo revisione assemblaggio"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Consenti revisioni solo per articoli di assemblaggio"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Consenti l'eliminazione dall'assemblaggio"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "IPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Consenti duplicati IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Permetti modifiche al part number interno (IPN)"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copia I Dati Della distinta base dell'articolo"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Copia I Dati Parametro dell'articolo"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Copia I Dati dell'Articolo Test"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copia Template Parametri Categoria"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Gli articoli sono modelli per impostazione predefinita"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Componente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Acquistabile"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Vendibile"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Gli articoli sono acquistabili per impostazione predefinita"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuale"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Gli articoli sono virtuali per impostazione predefinita"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Mostra articoli correlati"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Visualizza parti correlate per ogni articolo"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Dati iniziali dello stock"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Dati iniziali del fornitore"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formato di visualizzazione del nome articolo"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Formato per visualizzare il nome dell'articolo"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Icona predefinita Categoria Articolo"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Prezzi Minimi Decimali"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Prezzi Massimi Decimali"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Usa Prezzi Fornitore"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Ignora la Cronologia Acquisti"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Utilizzare i prezzi degli articoli in stock"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Età dei prezzi degli articoli in stock"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Utilizza Variazione di Prezzo"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Solo Varianti Attive"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Aggiornamento Automatico Prezzi"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Intervallo Di Ricostruzione Dei Prezzi"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Prezzi interni"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Abilita prezzi interni per gli articoli"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Sovrascrivi Prezzo Interno"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Abilita stampa etichette"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Etichetta Immagine DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Abilita Report di Stampa"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Abilita generazione di report di stampa"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Modalità Debug"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Registro errori"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Forza Unità Parametro"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Seriali Unici Globali"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Elimina scorte esaurite"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Modello Codice a Barre"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Scadenza giacenza"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Abilita funzionalità di scadenza della giacenza"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vendi giacenza scaduta"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Consenti la vendita di stock scaduti"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Tempo di Scorta del Magazzino"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Crea giacenza scaduta"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Permetti produzione con stock scaduto"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Controllo della proprietà della giacenza"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Icona Predefinita Ubicazione di Magazzino"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Mostra articoli a magazzino installati"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
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:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Consenti trasferimento magazzino esaurito"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Modello Di Riferimento Ordine Di Produzione"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Richiede Articolo Attivo"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Richiede Articolo Bloccato"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Richiede un BOM valido"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Richiedi Ordini Dei Figli Chiusi"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Ordini di Produzione Esterni"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Abilita funzionalità ordini di produzione esterni"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blocca Fino Al Passaggio Dei Test"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Impedisci che gli output di costruzione siano completati fino al superamento di tutti i test richiesti"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Abilita Ordini Di Reso"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Abilita la funzionalità ordine di reso nell'interfaccia utente"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Motivo di Riferimento per ordine di reso"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Modello richiesto per generare il campo di riferimento ordine di reso"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Modifica Ordini Di Reso Completati"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Consenti la modifica degli ordini di reso dopo che sono stati completati"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Modello Di Riferimento Ordine Di Vendita"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Spedizione Predefinita Ordine Di Vendita"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Modifica Ordini Di Vendita Completati"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "La Spedizione Richiede Controllo"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Impedire il completamento delle spedizioni fino a quando gli articoli sono stati controllati"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Segna gli ordini spediti come completati"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Gli ordini di vendita contrassegnati come spediti saranno automaticamente completati, bypassando lo stato \"spedito\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Modello di Riferimento Ordine D'Acquisto"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Modifica Ordini Di Acquisto Completati"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Converti Valuta"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Completa Automaticamente Gli Ordini D'Acquisto"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Abilita password dimenticata"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Abilita registrazione"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "SSO abilitato"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Abilita SSO nelle pagine di accesso"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Abilita registrazione SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Abilita sincronizzazione dei gruppi SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "Chiave gruppo SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Mappa del gruppo SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Rimuovere i gruppi al di fuori dell'SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email richiesta"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Riempimento automatico degli utenti SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Posta due volte"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Password due volte"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Domini consentiti"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Gruppo iscrizione"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Applica MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Controlla i plugin all'avvio"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Controlla gli aggiornamenti dei plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Abilita l'integrazione URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Attiva plugin per aggiungere percorsi URL"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Attiva integrazione navigazione"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "Abilita l'app integrata"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Abilita plugin per aggiungere applicazioni"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Abilita integrazione pianificazione"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Abilita eventi integrati"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Abilita integrazione interfaccia"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Abilita integrazione email"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Abilita codici progetto"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Escludi Posizioni Esterne"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Inventario periodico automatico"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Visualizza i nomi completi degli utenti"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Visualizza Profili Utente"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Abilita Dati Stazione Di Prova"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr "Abilita Ping Macchina"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
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"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Disabilitato: Mostra il percorso completo delle categorie al passaggio del mouse. Abilitato: Mostra il percorso completo delle categorie come testo."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Ricevi segnalazioni di errore"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Ricevi notifiche per errori di sistema"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Ultime stampanti usate"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Salva le ultime stampanti usate da un'utente"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Tutti i modelli"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Nessun tipo di modello allegato fornito"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Tipo di modello allegato non valido"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "I posti minimi non possono essere superiori al massimo"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Il numero massimo di posti non può essere inferiore al minimo"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Un dominio vuoto non è consentito."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nome dominio non valido: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Il valore deve essere maiuscolo"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Il valore deve essere un identificatore variabile valido"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Produttore"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Azienda"
@@ -4050,8 +4193,8 @@ msgstr "Numero di telefono di contatto"
msgid "Contact email address"
msgstr "Indirizzo email"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contatto"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Indirizzo"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Articolo di base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "Codice articolo produttore (MPN)"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Codice articolo produttore"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Fornitore"
@@ -4254,7 +4397,7 @@ msgstr "Fornitore"
msgid "Select supplier"
msgstr "Seleziona fornitore"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Unità di giacenza magazzino fornitore"
@@ -4282,16 +4425,16 @@ msgstr "URL dell'articolo del fornitore"
msgid "Supplier part description"
msgstr "Descrizione articolo fornitore"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "costo base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Confezionamento"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "multiplo"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr "Dati riga originali"
msgid "Errors"
msgstr "Errori"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Valido"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Sconosciuto"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ 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:132
msgid "Order Reference"
msgstr "Riferimento ordine"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "In Sospeso"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Ha il codice del progetto"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Creato Da"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Creato prima"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Creato dopo"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Ha data d'inizio"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Data d'inizio prima"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Data d'inizio dopo"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Ha data di fine"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Data obiettivo prima"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Data obiettivo dopo"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Prezzo Articolo"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Completato prima"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Completato dopo"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Ordine"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Ordine completato"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Articolo interno"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Ordine in sospeso"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Completato"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Ha Spedizione"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Restituisci ordine"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Prezzo Totale"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Prezzo totale dell'ordine"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Valuta ordine"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Questo ordine è bloccato e non può essere modificato"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Il contatto non corrisponde all'azienda selezionata"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "La data d'inizio deve essere precedente alla data di fine"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "L'indirizzo non corrisponde all'azienda selezionata"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descrizione dell'ordine (opzionale)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Collegamento a un sito web esterno"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Data iniziale"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Data scadenza"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Data di emissione"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Data di emissione ordine"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Utente o gruppo responsabile di questo ordine"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Punto di contatto per questo ordine"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Indirizzo dell'azienda per questo ordine"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Stato"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Stato ordine d'acquisto"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Azienda da cui sono stati ordinati gli articoli"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Riferimento fornitore"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Codice di riferimento ordine fornitore"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "ricevuto da"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Data ordine completato"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destinazione"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Destinazione per gli elementi ricevuti"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "L'elemento di riga non corrisponde all'ordine di acquisto"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Manca un elemento collegato"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "La quantità deve essere un numero positivo"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr "Stato ordine di vendita"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Riferimento Cliente "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Codice di riferimento Ordine del Cliente"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Data di spedizione"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "spedito da"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "L'ordine è già stato completato"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "L'ordine è già stato annullato"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Quantità Elementi"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Riferimento Linea Elemento"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Note linea elemento"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descrizione della parte (opzionale)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contesto aggiuntivo per questa voce"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Prezzo unitario"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Riga ordine d'acquisto"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "L'articolo del fornitore deve corrispondere al fornitore"
-#: order/models.py:1944
+#: order/models.py:2003
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:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Articolo Fornitore"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Ricevuto"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Prezzo di Acquisto"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Prezzo di acquisto unitario"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Riga Extra ordine di acquisto"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Articolo ordine di vendita"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Prezzo di Vendita"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Prezzo unitario di vendita"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Spedito"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Quantità spedita"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Spedizione dell'ordine di vendita"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "L'indirizzo di spedizione deve corrispondere al cliente"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Indirizzo di consegna per questa spedizione"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Data di spedizione"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Data di consegna"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Data di consegna della spedizione"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Verificato Da"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Spedizione"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Numero di spedizione"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Numero di monitoraggio"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informazioni di monitoraggio della spedizione"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Numero Fattura"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Numero di riferimento per la fattura associata"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "La spedizione è già stata spedita"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "La spedizione non ha articoli di stock assegnati"
-#: order/models.py:2446
+#: order/models.py:2516
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:2586
msgid "Sales Order Extra Line"
msgstr "Riga Extra ordine di vendita"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Assegnazione Ordini Di Vendita"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "L'elemento di magazzino non è stato assegnato"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Linea"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Riferimento della spedizione ordine di vendita"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Elemento"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Seleziona elemento stock da allocare"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Inserisci la quantità assegnata alla giacenza"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Riferimento ordine di reso"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Società a cui vengono restituiti gli articoli"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Stato ordine di reso"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Articolo Linea Ordine Reso"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "L'elemento stock deve essere specificato"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Quantità di reso superiore alla quantità di scorta"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Quantità non valida per l'elemento stock serializzato"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Seleziona l'elemento da restituire dal cliente"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Data di ricezione"
-#: order/models.py:3081
+#: order/models.py:3151
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:3163
msgid "Outcome"
msgstr "Risultati"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Risultato per questa voce di riga"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Riga Extra ordine di reso"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID Ordine"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID dell'ordine da duplicare"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Copia Linee"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Copia gli elementi di riga dall'ordine originale"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Copia Linee Extra"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Copia parametri"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Elementi Riga"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Righe Completate"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplica Ordine"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Specifica le opzioni per duplicare questo ordine"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "ID dell'ordine non corretto"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Nome Fornitore"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "L'ordine non può essere cancellato"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "L'ordine ha elementi di riga incompleti"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "L'ordine non è aperto"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Prezzo Automatico"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Valuta prezzo d'acquisto"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Unisci elementi"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Codice articolo"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Numero Dell'articolo Interno"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Numero Articolo Interno"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "L'articolo del fornitore deve essere specificato"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "L'ordine di acquisto deve essere specificato"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Elemento Riga"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: 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:872
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:880
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:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Nota aggiuntiva per gli articoli in arrivo"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Codice a Barre"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Codice a barre scansionato"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Gli elementi di linea devono essere forniti"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "La destinazione deve essere specificata"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr "Spedizioni"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Spedizioni Completate"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Valuta prezzo di vendita"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Elementi Assegnati"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Nessun dettaglio di spedizione fornito"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "La quantità deve essere positiva"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "La spedizione è già stata spedita"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "La spedizione non è associata con questo ordine"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "I seguenti numeri di serie non sono disponibili"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Articoli Linea Ordine Reso"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "L'elemento di riga è già stato ricevuto"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Quantità da restituire"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Valuta del prezzo"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perso"
@@ -5661,6 +5879,11 @@ msgstr "Rimborso"
msgid "Reject"
msgstr "Rifiuta"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Emesso"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Ordine D'Acquisto in ritardo"
@@ -5696,7 +5919,7 @@ msgstr "Preferiti"
msgid "Filter by starred categories"
msgstr "Filtra per categorie preferite"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Profondità"
@@ -5704,7 +5927,7 @@ msgstr "Profondità"
msgid "Filter by category depth"
msgstr "Filtra per profondità categoria"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Livello principale"
@@ -5712,7 +5935,7 @@ msgstr "Livello principale"
msgid "Filter by top-level categories"
msgstr "Filtra per categorie di primo livello"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Cascata"
@@ -5732,75 +5955,79 @@ msgstr "Filtra per categoria genitore"
msgid "Exclude sub-categories under the specified category"
msgstr "Escludi sottocategorie sotto la categoria specificata"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Ha Risultati"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "È una Variante"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "E' una revisione"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Ha revisioni"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM Valido"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Categorie a Cascata"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Filtra per categoria ID numerica o per la stringa 'null'"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "L'articolo assemblato è provabile"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Il componente è provabile"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Utilizzi"
@@ -5809,11 +6036,11 @@ msgstr "Utilizzi"
msgid "Part Category"
msgstr "Categoria Articoli"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Posizione Predefinita"
msgid "Default location for parts in this category"
msgstr "Posizione predefinita per gli articoli di questa categoria"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Strutturale"
@@ -5837,12 +6064,12 @@ msgstr "Keywords predefinite"
msgid "Default keywords for parts in this category"
msgstr "Parole chiave predefinite per gli articoli in questa categoria"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Icona"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Icona (facoltativa)"
@@ -5862,984 +6089,1028 @@ msgstr "Valore Predefinito"
msgid "Default Parameter Value"
msgstr "Valore Parametro Predefinito"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Vendita multipla"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Valuta utilizzata per calcolare i prezzi"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Costo Minimo Distinta Base"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Costo minimo dei componenti dell'articolo"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Costo Massimo Distinta Base"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Costo massimo dei componenti dell'articolo"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Importo Acquisto Minimo"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Costo minimo di acquisto storico"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Importo massimo acquisto"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Costo massimo di acquisto storico"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Prezzo Interno Minimo"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Costo minimo basato su interruzioni di prezzo interne"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Prezzo Interno Massimo"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Costo massimo basato su interruzioni di prezzo interne"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Prezzo Minimo Fornitore"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Prezzo minimo articolo da fornitori esterni"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Prezzo Massimo Fornitore"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Variazione di costo minimo"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Costo minimo calcolato di variazione dell'articolo"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Massima variazione di costo"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Costo massimo calcolato di variazione dell'articolo"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Costo Minimo"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Sovrascrivi il costo minimo"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Costo Massimo"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Sovrascrivi il costo massimo"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Costo minimo totale calcolato"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Costo massimo totale calcolato"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Prezzo Di Vendita Minimo"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Prezzo Di Vendita Massimo"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Costo Di Vendita Minimo"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Prezzo storico minimo di vendita"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Costo Di Vendita Minimo"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Prezzo storico massimo di vendita"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Articolo per l'inventario"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Contatore Elemento"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Numero di scorte individuali al momento dell'inventario"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Totale delle scorte disponibili al momento dell'inventario"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Data"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Data in cui è stato effettuato l'inventario"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Costo Minimo Scorta"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Costo minimo stimato di magazzino a disposizione"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Costo Massimo Scorte"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Costo massimo stimato di magazzino a disposizione"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Modello Prove Articolo"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nome Test"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Inserisci un nome per la prova"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Chiave Di Prova"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Chiave semplificata per la prova"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Descrizione Di Prova"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Inserisci descrizione per questa prova"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Questo test è attivo?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Richiesto"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Questa prova è necessaria per passare?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Valore richiesto"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Allegato Richiesto"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Scelte valide per questo test (separate da virgole)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
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:3956
+#: part/models.py:4080
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:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Seleziona articolo principale"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Articolo subordinato"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Seleziona l'articolo da utilizzare nella Distinta Base"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Quantità Distinta Base per questo elemento Distinta Base"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Questo elemento della Distinta Base è opzionale"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Imposta quantità"
-#: part/models.py:4009
+#: part/models.py:4141
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:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Logoramento"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Arrotondamento Multiplo"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Riferimento Elemento Distinta Base"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Note Elemento Distinta Base"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Codice di controllo"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Codice di controllo Distinta Base"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Convalidato"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Questo articolo della distinta base è stato validato"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Viene Ereditato"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "L'articolo subordinato deve essere specificato"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Elemento Distinta Base Sostituito"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Elemento principale Distinta Base"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Sostituisci l'Articolo"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Articolo 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Articolo 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Seleziona Prodotto Relativo"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Nota per questa relazione"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "La relazione duplicata esiste già"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Categoria Superiore"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Categoria articolo principale"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Sottocategorie"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Risultati"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Valuta di acquisto di questo articolo in stock"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Il file non è un immagine"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Articolo Originale"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Seleziona l'articolo originale da duplicare"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Copia immagine"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Copia immagine dall'articolo originale"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copia Distinta Base"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Copia fattura dei materiali dall'articolo originale"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Copia i dati dei parametri dall'articolo originale"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Copia note"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Copia note dall'articolo originale"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Copia Test"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "Copia modelli di test dall'articolo originale"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Quantità iniziale"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Ubicazione Iniziale Magazzino"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "Seleziona il fornitore (o lascia vuoto per saltare)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Seleziona il produttore (o lascia vuoto per saltare)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Codice articolo Produttore"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "L'azienda selezionata non è un fornitore valido"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "L'azienda selezionata non è un produttore valido"
-#: part/serializers.py:529
+#: part/serializers.py:548
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:555
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:840
msgid "Category Name"
msgstr "Nome Categoria"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "In Costruzione"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "Quantità di questo articolo attualmente in produzione"
-#: part/serializers.py:853
+#: part/serializers.py:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Articoli in magazzino"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revisioni"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Scorte Non Assegnate"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Scorta Variante"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Duplica articolo"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Copia i dati iniziali da un altro Articolo"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Stock iniziale"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Crea Articolo con quantità di scorta iniziale"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Informazioni Fornitore"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Copia Parametri Categoria"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Immagine esistente"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Nome del file di un'immagine articolo esistente"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Il file immagine non esiste"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Convalida l'intera Fattura dei Materiali"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Puoi produrre"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Richiesto per gli Ordini di Produzione"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Assegnato agli Ordini di Produzione"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Richiesto per gli Ordini di Vendita"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Assegnato agli Ordini di Vendita"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Prezzo Minimo"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Sovrascrivi valore calcolato per il prezzo minimo"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Valuta del prezzo minimo"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Prezzo Massimo"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Sovrascrivi valore calcolato per il prezzo massimo"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Valuta del prezzo massimo"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Aggiorna"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Aggiorna i prezzi per questo articolo"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Seleziona l'assemblaggio padre"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Seleziona la componente"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Seleziona l'articolo da cui copiare la distinta base"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Rimuovi Dati Esistenti"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Rimuovi elementi distinta base esistenti prima di copiare"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Includi Ereditato"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Salta Righe Non Valide"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Copia Articoli sostitutivi"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Plugin"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nessun autore trovato"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Materiali necessari"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Emesso"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Richiesto Per"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Numero Seriale"
@@ -8292,7 +8560,7 @@ msgstr "Test Report Elemento Stock"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Elementi installati"
@@ -8325,6 +8593,10 @@ msgstr "Nessun risultato (richiesto)"
msgid "No result"
msgstr "Nessun risultato"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Nome della parte (maiuscole e minuscole)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Il nome della parte contiene (maiuscole e minuscole)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Nome della parte (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "IPN della parte (maiuscole e minuscole)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "IPN della parte contiene (maiuscole e minuscole)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "IPN della parte (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Giacenza minima"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Giacenza massima"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Codici di stato"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Ubicazione Esterna"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Obsoleto"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "La quantità è richiesta"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Deve essere fornita un articolo valido"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Ubicazione magazzino"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Posizioni magazzino"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Proprietario"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Seleziona Owner"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Esterno"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Si tratta di una posizione esterna al magazzino"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "L'articolo deve essere specificato"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "L'elemento non può appartenere a se stesso"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Elemento di magazzino principale"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Articolo base"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Imballaggio di questo articolo di magazzino è collocato in"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Installato In"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Questo elemento è stato installato su un altro elemento?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Numero di serie per questo elemento"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Codice lotto per questo elemento di magazzino"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Quantità disponibile"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Genera Costruzione"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Costruisci per questo elemento di magazzino"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Origina Ordine di Acquisto"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Ordine d'acquisto per questo articolo in magazzino"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Destinazione Ordine di Vendita"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Elimina al esaurimento"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Convertito in articolo"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "L'articolo non è impostato come tracciabile"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "La quantità deve essere un numero intero"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
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:1979
msgid "Quantity does not match serial numbers"
msgstr "La quantità non corrisponde ai numeri di serie"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "L'elemento di magazzino contiene altri elementi"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "L'elemento di magazzino è attualmente in produzione"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Duplica elementi di magazzino"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "I codici di stato dello stock devono corrispondere"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Note d'ingresso"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Il valore deve essere fornito per questo test"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "L'allegato deve essere caricato per questo test"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Risultato Test"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Test valore output"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Risultato della prova allegato"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Note del test"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Inserisci i numeri di serie per i nuovi elementi"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Scaduto"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Elementi secondari"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Inserisci il numero di elementi di magazzino da serializzare"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "La quantità non deve superare la quantità disponibile ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Posizione magazzino di destinazione"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Numeri di serie non possono essere assegnati a questo articolo"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Numeri di serie già esistenti"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Seleziona elementi di magazzino da installare"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Aggiungi nota di transazione (opzionale)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Elemento di magazzino non disponibile"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "L'articolo selezionato non è nella Fattura dei Materiali"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Posizione di destinazione per gli elementi disinstallati"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "L'articolo selezionato non è una valida opzione per la conversione"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sottoallocazioni"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "L'articolo deve essere vendibile"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "L'elemento è assegnato a un ordine di vendita"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Elemento assegnato a un ordine di costruzione"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Cliente a cui assegnare elementi di magazzino"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "L'azienda selezionata non è un cliente"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Note sull'assegnazione delle scorte"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Deve essere fornito un elenco degli elementi di magazzino"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Note di fusione di magazzino"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Consenti fornitori non corrispondenti"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Consenti stato non corrispondente"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Devono essere riforniti almeno due elementi in magazzino"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Nessun cambiamento"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Valore di chiave primaria StockItem"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Note sugli spostamenti di magazzino"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Amministratore"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Ordine di acquisto"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Ordini di Vendita"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Ordini di reso"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nome utente"
diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po
index 833b1050b2..e297a866cd 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
@@ -23,7 +23,7 @@ msgstr "APIエンドポイントが見つかりません"
#: InvenTree/api.py:438
msgid "List of items must be provided for bulk operation"
-msgstr ""
+msgstr "一括処理を行うには、部品リストを指示する必要があります"
#: InvenTree/api.py:445
msgid "Items must be provided as a list"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "{original}を{unit}に変換できませんでした。"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "数量コードが無効です"
@@ -104,13 +105,13 @@ msgstr "日付を入力する"
msgid "Invalid decimal value"
msgstr "無効な10進数値"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "メモ"
@@ -165,49 +166,49 @@ msgstr "データに禁止されているマークダウン・コンテンツが
#: InvenTree/helpers_model.py:109
msgid "Invalid URL: no hostname"
-msgstr ""
+msgstr "無効なURL:ホスト名がありません"
#: InvenTree/helpers_model.py:114
msgid "Invalid URL: hostname could not be resolved"
-msgstr ""
+msgstr "無効なURL:ホスト名を解決できませんでした"
#: InvenTree/helpers_model.py:120
msgid "URL points to a private or reserved IP address"
-msgstr ""
+msgstr "URLがプライベートIPアドレスまたは予約済みIPアドレスを指しています"
-#: InvenTree/helpers_model.py:195
+#: InvenTree/helpers_model.py:197
msgid "Too many redirects"
-msgstr ""
+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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "説明"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "説明 (オプション)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "有効な数字でなければなりません"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "通貨"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "注文ステータス"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "親ビルド"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "バリアントを含む"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "バリアントを含む"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "バリアントを含む"
msgid "Part"
msgstr "パーツ"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "カテゴリ"
@@ -605,7 +593,7 @@ msgstr "カテゴリ"
msgid "Ancestor Build"
msgstr "祖先ビルド"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "担当"
@@ -653,374 +641,365 @@ msgstr "完成前"
msgid "Completed after"
msgstr "終了後"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "最小日付"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "最大日付"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "ツリーを除く"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "削除するには、ビルドをキャンセルする必要があります。"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "消耗品"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "オプション"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "アセンブリ"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "追跡"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "テスト可能"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "受注残高"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "割り当てられた"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "消費されました"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "注文中"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
-msgstr ""
+msgstr "ビルドが見つかりません"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "組立注文"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "場所"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "出力"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "出力ストックアイテムIDでフィルタリングします。未インストールビルドアイテムを検索するには「null」をご使用ください。"
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "組立注文"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "アセンブリBOMが検証されていません"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "非アクティブな部品にビルドオーダーを作成できません。"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "ロックされていない部品にビルドオーダーを作成できません。"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "ビルドオーダーを外部委託できるのは、購入可能部品のみです"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "担当ユーザーまたはグループを指定する必要があります。"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "ビルドオーダー部品は変更できません"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "目標期日は開始日以降であること"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "ビルド・オーダー・リファレンス"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "参照"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "建築の簡単な説明(任意)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
-msgstr ""
+msgstr "このビルドが引き当てられているビルドオーダー"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "製造する部品の選択"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "セールス・オーダー・リファレンス"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
-msgstr ""
+msgstr "このビルドが引き当てられている受注"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "ソース・ロケーション"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "このビルドで在庫を取得する場所を選択します(任意の在庫場所から取得する場合は空白のままにしてください)。"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "外部ビルド"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "このビルドオーダーは外部委託されます。"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "目的地"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "完成したアイテムの保管場所を選択"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "数量"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "構築するストックアイテムの数"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "完成品"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "完了した在庫アイテムの数"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "組立状況"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "ビルドステータスコード"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "バッチコード"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "作成日時"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "ビルド開始日"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "この注文の開始予定日"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "完成目標日"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "完了日"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "完了者"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "発行者"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "このビルドオーダーを発行したユーザー"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "責任"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "このビルドオーダーを担当するユーザーまたはグループ"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "外部リンク"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "外部 サイト へのリンク"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "組立優先度"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "建設順序の優先順位"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "プロジェクトコード"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "プロジェクトコード"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "製造中の子ビルドがあるため、ビルドオーダーを完了できません"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "不完全な出力があるため、ビルドオーダーを完了できません"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "ビルドの割り当てを完了するタスクのオフロードに失敗しました。"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "ビルドオーダー{build}が完了しました"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "建設発注が完了しました"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "追跡可能な部品については、シリアル番号の提示が必要です。"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "ビルド出力が指定されていません"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "ビルド出力はすでに完了しています"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "ビルド出力がビルド順序と一致しません"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "数量はゼロより大きくなければなりません"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "数量が出力数量を上回ることはできません"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "ビルド出力は、必要なすべてのテストを通過していません"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
-msgstr ""
+msgstr "引き当て済みの在庫品は、現在生産中です"
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "ビルドオーダーラインアイテム"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "ビルドオブジェクト"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "ビルドオブジェクト"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "数量"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "注文数量"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "消費された在庫の数量"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "ビルド項目は、ビルド出力を指定する必要があります。"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "選択された在庫品目が部品表に一致しません。"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
-msgstr ""
+msgstr "引き当て数はゼロより大きくなければなりません"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "シリアル在庫の場合、数量は1でなければなりません。"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "在庫が過剰配分"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "在庫商品"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "ソース在庫品"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "建設に割り当てる在庫量"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "インストール"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "仕向け地在庫品"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "ビルドレベル"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "部品名"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "ビルド出力"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "ビルド出力が親ビルドと一致しません"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "出力部分が BuildOrder 部分と一致しません。"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "このビルド出力はすでに完了しています"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "このビルド出力は完全に割り当てられていません"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "ビルド出力の数量を入力"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "追跡可能な部品に必要な整数個数"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "シリアル番号"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "ビルド出力のためのシリアル番号の入力"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "ビルド出力のストック位置"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "シリアル番号の自動割り当て"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "以下のシリアル番号は既に存在するか、無効です。"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "ビルド出力のリストを提供する必要があります。"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "スクラップされたアウトプットの在庫場所"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "廃棄割り当て"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "ビルドアウトプットを廃棄する理由"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "完成した建造物のアウトプットの場所"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "不完全割当の受入れ"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "割当在庫の消費"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "このビルドに割り当て済みのストックを消費します。"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "不完全な出力の削除"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "完了していないビルド出力を削除します。"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "不可"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "このビルド・オーダーで消費されるものとして受け入れます。"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "このビルドオーダーを完了する前に割り当てを解除します。"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "総合在庫"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "一部の在庫品目は全体的に配分されています。"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "未割り当ての受け入れ"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "必要在庫の配分が完了していません"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "インコンプリートの受け入れ"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "必要な構築数量が完了していません"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "受注生産状態であること"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "ビルド・オーダーの出力が不完全"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "組立ライン"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "ビルド出力"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "ビルド出力は同じビルド"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "ビルドラインアイテム"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "在庫があること"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "使用可能数量({q})を超過"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "割り当て項目の提供"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "場所を除く"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "この選択された場所から在庫商品を除外"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "交換可能ストック"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "複数の拠点にある在庫品を交換可能"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "代替ストック"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "代替部品の割り当て"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "オプション"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
-msgstr ""
+msgstr "すべてのアイテム"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
-msgstr ""
+msgstr "非追跡対象部品"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
-msgstr ""
+msgstr "追跡対象部品"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
-msgstr ""
+msgstr "項目タイプ"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
-msgstr ""
+msgstr "自動引き当てを行なう部品種類を選択してください"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOMリファレンス"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOMパーツID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "部品表 部品名"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
-msgstr ""
+msgstr "インストール先"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "ビルド"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "サプライヤー"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "割当数量"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "ビルドリファレンス"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "部品分類名"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "追跡可能"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "継承"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "バリアントを許可"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "BOMアイテム"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "生産中"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "ビルド予定"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "外部在庫"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "在庫状況"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "利用可能な代替ストック"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "在庫状況"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "消費量が割り当て量を超過しています"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "在庫消費に関する任意の注記"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "ビルド項目は正しいビルドオーダーを指す必要があります"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "重複したビルド項目の割り当て"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "ビルドラインは正しいビルドオーダーを指す必要があります"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "重複したビルドラインの割り当て"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "少なくとも1つの項目または行を指示する必要があります"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "処理待ち"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "生産"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "保留中"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "キャンセル済"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "完了"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "ビルドオーダー{build}が完了しました"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "建設発注が完了しました"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "受注生産に必要な在庫"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "ビルドオーダー{build}には追加の在庫が必要となります"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "期限切れ注文"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "ビルドオーダー{bo}は現在期限切れです"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr "サムネイルあり"
+
+#: common/api.py:732
msgid "Is Link"
msgstr "リンク"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "ファイル"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr "この添付ファイルを編集する権限がありません"
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "ユーザーにはこの添付ファイルを削除する権限がありません"
@@ -1554,794 +1553,835 @@ msgstr "プラグインなし"
msgid "Project Code Label"
msgstr "プロジェクトコードラベル"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "更新しました"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "最終更新のタイムスタンプ"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "更新者:"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "このオブジェクトを最後に更新したユーザー"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "独自のプロジェクトコード"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "プロジェクトの説明"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "このプロジェクトを担当するユーザーまたはグループ"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "設定キー"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "設定値"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "選択された値は有効なオプションではありません。"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "値はブール値でなければなりません。"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "値は整数値でなければなりません。"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "値は有効な数値でなければなりません。"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "値がバリデーション・チェックに合格しない"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "価格破壊数量"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "価格"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "指定数量での単価"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "エンドポイント"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "このウェブフックを受信するエンドポイント"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "このウェブフックの名前"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "このウェブフックはアクティブですか"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "トークン"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "アクセス用トークン"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "シークレット"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "HMACの共有秘密"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "メッセージ ID:"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "このメッセージの一意な識別子"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "ホスト"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "このメッセージを受信したホスト"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "ヘッダー"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "このメッセージのヘッダー"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "本文"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "メッセージ本文"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "このメッセージを受信したエンドポイント"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "作業内容"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "このメッセージに関する作業は終わったのですか?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "タイトル"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "リンク"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "公開済み"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "投稿者"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "概要"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "既読"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "このニュースは読まれましたか?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "画像ファイル"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "この画像の対象モデルタイプ"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "この画像の対象モデルID"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "カスタムユニット"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "単位記号は一意でなければなりません。"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "ユニット名は有効な識別子でなければなりません。"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "ユニット名"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "シンボル"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "オプションの単位記号"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "定義"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "ユニットの定義"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "添付ファイル"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "ファイルがありません"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "外部リンクが見つかりません。"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr "名前を変更するファイルがありません"
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr "ファイル名は空にできません"
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr "不正なファイル名"
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr "ファイルの拡張子を変更できません"
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr "この名前のファイルはすでに存在します"
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr "ファイル名の変更後の保存に失敗しました"
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "モデルタイプ"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "画像の対象モデルタイプ"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "添付ファイルを選択"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr "サムネイル"
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr "この添付ファイルのサムネイル画像"
+
+#: common/models.py:2128
msgid "Comment"
msgstr "コメント:"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "添付コメント"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "アップロード日"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "ファイルがアップロードされた日付"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr "画像"
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr "この添付ファイルが有効な画像ファイルである場合、真となります"
+
+#: common/models.py:2156
msgid "File size"
msgstr "ファイルサイズ"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "ファイルサイズ(バイト"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "添付ファイルに指定されたモデルタイプが無効です"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "カスタムステート"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "カスタムステート"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "リファレンス・ステータス・セット"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "このカスタム状態で拡張されたステータスセット"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "論理キー"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "値"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "モデルのデータベースに保存される数値"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "都道府県名"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "ラベル"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "フロントエンドに表示されるラベル"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "色"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "フロントエンドに表示される色"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "モデル"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "この状態が関連するモデル"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "モデルを選択する必要があります"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "キーを選択する必要があります。"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "論理キーを選択する必要があります。"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "キーは論理キーと異なる必要があります。"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "有効な参照ステータスクラスが提供されなければならない"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "セレクションリスト"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "セレクション・リスト"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "選択リストの名前"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "選択リストの説明"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "ロック中"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "この選択リストはロックされていますか?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "このセレクションリストは使えますか?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "ソースプラグイン"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "選択リストを提供するプラグイン"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "ソースストリング"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "このリストに使用されているソースを示すオプションの文字列"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "デフォルトエントリー"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "この選択リストのデフォルト項目"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "作成日"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "選択リストが作成された日時"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "最終更新"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "選択リストが最後に更新された日時"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "セレクションリスト入力"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "セレクションリスト"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "このエントリーが属する選択リスト"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "選択リストエントリーの値"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "選択リスト項目のラベル"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "選択リスト項目の説明"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "この選択リストはアクティブですか?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "パラメータテンプレート"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "パラメータテンプレート"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "チェックボックスのパラメータに単位を指定することはできません。"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "チェックボックスパラメータに選択肢を持たせることはできません。"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "選択肢はユニークでなければなりません"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "パラメータ・テンプレート名は一意でなければなりません。"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "このパラメータテンプレートにおける対象モデルタイプ"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "パラメータ名"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "単位"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "このパラメータの物理単位"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "パラメータの説明"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "チェックボックス"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "このパラメータはチェックボックスですか?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "選択肢"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "このパラメータの有効な選択肢(カンマ区切り)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "このパラメータの選択リスト"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "有効"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "このパラメータテンプレートは有効ですか?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "パラメータ"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "パラメータ"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "パラメータ値の選択が無効"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "パラメータに対して無効なモデルタイプが指定されています"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "モデルID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "パラメータテンプレート"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "データ"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "パラメータ値"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "備考"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "任意のメモ欄"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "バーコードスキャン"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "バーコードデータ"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "バーコードをスキャンしたユーザー"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "タイムスタンプ"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "バーコードスキャンの日時"
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr "バーコードを処理したURLエンドポイント"
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "コンテキスト"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "バーコードスキャンのコンテキストデータ"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "返答"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "結果"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "バーコードスキャンは成功しましたか?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "エラーが発生しました"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "メールメッセージ"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "メールメッセージ"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "発表されました"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "送信"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "失敗"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "配送済み"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "確認済み"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "インバウンド"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "アウトバウンド"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "返信なし"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "配送状況を記録"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "読み取りを記録"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "クリックを記録"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "グローバルID"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "このメッセージの識別子(外部システムから提供される場合があります)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "スレッドID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "スレッド"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "このメッセージに関連するスレッド"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "優先順位"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "メールのスレッド"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "メールのスレッド"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "このスレッドの固有識別子"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "内部を開始しました"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "このスレッドは内部で開始されたものですか?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "スレッドが作成された日時"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "スレッドが最後に更新された日時"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "受領品目"
@@ -2377,11 +2417,11 @@ msgstr "返品注文に反して商品が届いた場合"
#: common/serializers.py:125
msgid "Indicates if changing this setting requires confirmation"
-msgstr ""
+msgstr "この設定を変更する際に確認が必要かどうかの指示"
#: common/serializers.py:139
msgid "This setting requires confirmation before changing. Please confirm the change."
-msgstr ""
+msgstr "この設定を変更するには、確認が必要です。変更内容をご確認ください。"
#: common/serializers.py:172
msgid "Indicates if the setting is overridden by an environment variable"
@@ -2451,25 +2491,25 @@ msgstr "キーワード論争"
msgid "Task keyword arguments"
msgstr "タスクキーワード引数"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "モデルタイプ"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "このモデルの添付ファイルを作成または編集する権限がありません。"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "選択リストがロックされています"
@@ -2547,19 +2587,19 @@ msgstr "スーパーユーザーにのみ `about` モーダルを表示します
#: 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 "スーパーユーザーとしてログインした際、UIに警告バナーを表示します"
#: 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 "管理者としてログインした際に、UIに警告バナーを表示します"
#: common/setting/system.py:251 company/models.py:147 company/models.py:148
msgid "Company name"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "日"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "通貨更新プラグイン"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "URLからダウンロード"
+msgid "Upload Size Limit"
+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 "ダウンロードサイズ制限"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "URL検証時にスキーマ指定を要求"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "更新チェック間隔"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "アップデートをチェックする頻度 (ゼロに設定すると無効になります)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "自動バックアップ"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "データベースとメディアファイルの自動バックアップ"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "自動バックアップ間隔"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "自動バックアップイベント間の日数を指定"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "タスク削除間隔"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "バックグラウンドタスクの結果は、指定した日数後に削除されます。"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "エラーログ削除間隔"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "エラーログは指定した日数後に削除されます。"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "通知削除間隔"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "ユーザー通知は指定された日数後に削除されます。"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "メール削除間隔"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "メールメッセージは、指定された日数が経過後に削除されます。"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "メールログの保護"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "メールログエントリの削除を防止します"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "バーコードサポート"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "ウェブインターフェイスでバーコードスキャナのサポートを有効にします。"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "店舗バーコード結果"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "バーコードスキャン結果をデータベースに保存"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "バーコードスキャン最大カウント"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "バーコードスキャン結果の最大保存数"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "バーコード入力遅延"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "バーコード入力処理遅延時間"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "バーコードウェブカメラサポート"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "ブラウザのウェブカメラでバーコードのスキャンが可能"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "バーコード表示データ"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "バーコードデータをテキストとしてブラウザに表示"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "バーコード生成プラグイン"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "内部バーコードデータ生成に使用するプラグイン"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "部品改訂"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "パートのリビジョンフィールドを有効にします。"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "アセンブリ改訂のみ"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "組立部品のみ修正可能"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "アセンブリからの削除を許可"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "アセンブリで使用されている部品の削除を許可します。"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN 正規表現"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "部分IPNにマッチする正規表現パターン"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "IPNの重複を許可"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "複数のパートが同じIPNを共有できるようにします。"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "IPNの編集を許可"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "部品編集中にIPN値の変更を許可"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "部品表データのコピー"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "部品複製時にBOMデータをデフォルトでコピー"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "部品パラメータデータのコピー"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "部品複製時にデフォルトでパラメータデータをコピー"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "コピー部品テストデータ"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "部品複製時にテストデータをデフォルトでコピー"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "カテゴリー・パラメーター・テンプレートのコピー"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "パーツはデフォルトのテンプレートです"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "コンポーネント"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "パーツはデフォルトでサブコンポーネントとして使用できます"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "購入可能"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "パーツはデフォルトで購入可能です"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "販売可能"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "パーツはデフォルトで販売可能です"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "パーツはデフォルトで追跡可能です"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "バーチャル"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "パーツはデフォルトでバーチャル"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "関連部品を表示"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "部品の関連部品を表示"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "初期在庫データ"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "新規部品追加時に初期在庫を作成可能"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "サプライヤー初期データ"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "新しい部品を追加する際に、最初のサプライヤーデータを作成できるようにします。"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "部品名表示形式"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "部品名の表示形式"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "パーツカテゴリー デフォルトアイコン"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "パートカテゴリのデフォルトアイコン(空はアイコンがないことを意味します)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "価格の最小桁数"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "価格データのレンダリング時に表示する最小小数点以下の桁数"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "価格の小数点以下の桁数"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "価格データのレンダリング時に表示する小数点以下の桁数の最大値"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "サプライヤー価格の利用"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "全体的な価格計算にサプライヤーの価格破壊を含めること"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "購入履歴の上書き"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "過去の発注価格がサプライヤーの価格変動を上書き"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "ストックアイテム価格を使用"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "手動入力された在庫データから価格計算を行います。"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "在庫商品の価格設定年齢"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "この日数より古い在庫品を価格計算から除外します。"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "バリアント価格を使用"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "全体的な価格計算にバリアント価格を含む"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "アクティブバリアントのみ"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "バリアント価格の計算には、アクティブなバリアントパーツのみを使用します。"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "自動更新の価格設定"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "内部データが変更された際に、部品価格を自動的に更新します。"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "価格の再構築間隔"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "部品価格が自動的に更新されるまでの日数"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "社内価格"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "部品の内部価格の有効化"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "内部価格オーバーライド"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "利用可能な場合、内部価格は価格帯の計算より優先されます。"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
-msgstr ""
+msgstr "BOMの数量が0になることを許可"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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 ""
+msgstr "部品のBOMアイテムについて、数量がゼロの場合も許可します。これにより、セットアップ数量を使用して、製造数量とは独立して、1回の製造ごとに必要な数量を定義できるようになります"
-#: common/setting/system.py:662
+#: common/setting/system.py:655
msgid "Enable label printing"
msgstr "ラベル印刷の有効化"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "ウェブインターフェースからラベル印刷を有効にします。"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "ラベル画像DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "ラベル印刷プラグインに供給する画像ファイルを生成する際のDPI解像度"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "レポートの有効化"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "レポートの作成"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "デバッグモード"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "デバッグモードでのレポート生成(HTML出力)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "ログレポートエラー"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "ページサイズ"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "PDFレポートのデフォルトのページサイズ"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "パラメータ単位の強制"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "単位が指定されている場合、パラメータ値は指定された単位に一致する必要があります。"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "世界的にユニークな連載"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "在庫品のシリアル番号はグローバルに一意でなければなりません。"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "枯渇在庫の削除"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "ストックアイテムが枯渇した場合のデフォルトの動作を決定します。"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr "シリアル番号の編集を許可"
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr "在庫品のシリアル番号の編集を許可します"
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr "シリアル化された在庫を削除"
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr "シリアル番号が設定されている在庫品の削除を許可します"
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "バッチコードテンプレート"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "ストックアイテムのデフォルトバッチコード生成用テンプレート"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "有効期限"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "在庫期限切れ機能の有効化"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "期限切れ株式の売却"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "期限切れ株式の売却を許可"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "在庫切れ時間"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "在庫品が期限切れとみなされるまでの日数"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "賞味期限切れ在庫の処理"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "期限切れの在庫を使用した建物の建築を許可"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "株式所有権"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "ストックロケーションとアイテムの所有権管理"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "在庫場所 デフォルトアイコン"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "在庫場所のデフォルトアイコン(空はアイコンがないことを意味します。)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "インストール済みストックアイテムの表示"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "ストックテーブルにインストールされたストックアイテムを表示"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "アイテム取り付けの際はBOMをチェック"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "親部品のBOMには、インストールされたストックアイテムが存在する必要があります。"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "在庫切れの転送を許可"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "ビルド・オーダー参照パターン"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "各注文には、責任ある所有者を指定する必要があります。"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "アクティブパートが必要"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "非稼動部品の製造オーダー作成を防止"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "ロックされた部分を要求"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "ロックされていない部品の製造オーダー作成を防止"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "有効なBOMが必要"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "BOMが検証されない限り、製造オーダーが作成されないようにします。"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "クローズド・チャイルド・オーダー"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "すべてのチャイルドオーダーが終了するまで、ビルドオーダーの完了を防止します。"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "外部ビルドオーダー"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "外部ビルドオーダー機能の有効化"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr "外部ビルドオーダーを必須とする"
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr "外部サプライヤーから組み立て済み部品を発注する際は、外部ビルドオーダーを指定する必要があります"
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "テストがパスするまでブロック"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "必要なテストがすべて合格するまで、ビルド出力が完了しないようにします。"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "返品注文の有効化"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "ユーザーインターフェイスで返品注文機能を有効にします。"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "リターンオーダー参照パターン"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "返品注文参照フィールドの生成に必要なパターン"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "完了した返品注文の編集"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "注文完了後の返品注文の編集が可能"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "販売注文参照パターン"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "販売注文参照フィールドの生成に必要なパターン"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "販売注文のデフォルト出荷"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "販売注文でデフォルト出荷を作成可能"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "完了した販売注文の編集"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "出荷または完了後の販売注文の編集を許可します。"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "出荷には確認が必要です"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "商品が確認されるまで、出荷の完了をお控えください。"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "出荷された注文を完了としてマーク"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "出荷済みと表示された販売注文は、「出荷済み」ステータスを回避して自動的に完了します。"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr "在庫移動指示を有効"
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr "ユーザーインターフェースで在庫移動指示機能を有効にします"
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr "在庫移動指示コード採番フォーマット"
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr "在庫移動指示コードを自動採番するために使用するフォーマット(必須項目)"
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr "未完了項目のテストのブロック"
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr "必要な品目チェックが完了していない場合、販売注文への在庫品目の割り当てを防止します"
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "発注書参照パターン"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "発注書参照フィールドの生成に必要なパターン"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "完了した発注書の編集"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "出荷後または完了後の発注書の編集が可能"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "通貨の変換"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "在庫を受け取る際、商品価値を基準通貨に変換"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "自動発注"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "すべての品目を受領した時点で、発注書を完了として自動的にマーク"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "パスワード忘れ"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "ログインページでのパスワード忘れ防止機能の有効化"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "登録の有効化"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "ログインページでユーザーの自己登録を可能にします。"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "SSOの有効化"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "ログインページでSSOを有効化"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "SSO登録の有効化"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "ログインページでSSOによるユーザーの自己登録を可能にします。"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "SSOグループ同期の有効化"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "InvenTreeグループとIdPが提供するグループの同期を有効にします。"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "SSOグループキー"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "SSOグループマップ"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "SSO外のグループを削除"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "メールアドレスは必須です"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "サインアップ時にメールの入力を要求"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "SSOユーザーの自動入力"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "SSOアカウントデータからユーザー詳細を自動入力"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "メール2回"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "サインアップの際、ユーザーに2度メールを尋ねます。"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "パスワード2回"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "サインアップ時にパスワードを2回要求"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "許可ドメイン"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "特定のドメイン(@で始まるカンマ区切り)へのサインアップを制限します。"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "登録時のグループ"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "MFAの実施"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "ユーザーは多要素セキュリティを使用する必要があります。"
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
-msgstr ""
+msgstr "この設定を有効にすると、すべてのユーザーに多要素認証の設定が必須となります。すべてのセッションは直ちに切断されます。"
-#: common/setting/system.py:1052
+#: common/setting/system.py:1093
msgid "Check plugins on startup"
msgstr "起動時にプラグインをチェック"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr "起動時にすべてのプラグインがインストールされていることを確認 - コンテナ環境では有効にします。"
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "プラグインのアップデートの確認"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "インストールされているプラグインのアップデートを定期的にチェックします。"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "URL統合の有効化"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "プラグインがURLルートを追加できるようにします"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "ナビゲーション統合の有効化"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "プラグインをナビゲーションに統合可能"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "アプリとの統合"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "プラグインを有効にしてアプリを追加"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "スケジュール統合の有効化"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "スケジュールタスクを実行するプラグインの有効化"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "イベント統合の有効化"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "プラグインが内部イベントに応答できるようにします。"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "インターフェース統合の有効化"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "プラグインがユーザー・インターフェースに統合できるようにします。"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "メール連携を有効にする"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "プラグインを有効にして、送信/受信メールを処理できるようにします"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "プロジェクトコードの有効化"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "プロジェクトを追跡するためのプロジェクトコードの有効化"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
-msgstr ""
+msgstr "棚卸機能を有効"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "過去の在庫数量および価値を記録する機能を有効にします"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "外部ロケーションを除く"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
-msgstr ""
+msgstr "外部拠点にある在庫品を棚卸計算から除外します"
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "自動引取期間"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
-msgstr ""
+msgstr "自動棚卸記録の間隔(日数)"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
-msgstr ""
+msgstr "古い棚卸の記録を削除"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
-msgstr ""
+msgstr "指定した日数より古い棚卸し記録を削除します"
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
-msgstr ""
+msgstr "棚卸しの削除間隔"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
-msgstr ""
+msgstr "棚卸し記録は、指定された日数が経過すると削除されます"
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
-msgstr ""
+msgstr "古い在庫追跡記録を削除"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
-msgstr ""
+msgstr "指定した日数より古い在庫追跡記録を削除します"
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
-msgstr ""
+msgstr "在庫追跡記録の削除間隔"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
-msgstr ""
+msgstr "在庫追跡記録は、指定された日数が経過すると削除されます"
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "ユーザーのフルネームを表示"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "ユーザー名の代わりにフルネームを表示"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "ユーザープロファイルの表示"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "プロフィールページにユーザーのプロフィールを表示"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr "週の始まり"
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr "カレンダー表示における週開始曜日"
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr "日曜日"
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr "月曜日"
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr "火曜日"
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr "水曜日"
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr "木曜日"
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr "金曜日"
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr "土曜日"
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "テストステーションデータの有効化"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "テスト結果のテストステーションデータ収集の有効化"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "マシン ping を有効にする"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "登録されたマシンの状態を確認するため、定期的なpingタスクを有効にしてください"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "無効時:カテゴリの完全なパスがホバー時のツールチップとして表示されます。有効時:カテゴリの完全なパスがプレーンテキストとして表示されます。"
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr "BOMテーブルにサブアセンブリを表示"
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr "BOMテーブルでサブアセンブリ表示を有効にします"
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "エラー・レポートの受信"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "システムエラーの通知を受信"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "最後の中古印刷機"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "ユーザーの最後に使用した印刷機を保存"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "全モデル"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "アタッチメント型式なし"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "無効なアタッチメントモデルタイプ"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr "ファイルサイズが{max_size} MBのアップロード上限を超えています"
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr "ファイル名が不正です"
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "最小プレースは最大プレースより大きくできません。"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "最大定員が最小定員を下回ることはありません。"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "空のドメインは使用できません。"
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "無効なドメイン名: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "値は大文字でなければならない"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "値は有効な変数識別名でなければならない。"
@@ -3994,7 +4137,7 @@ msgstr "サプライヤーが活動中"
#: company/api.py:254
msgid "Primary Supplier Part"
-msgstr ""
+msgstr "主要サプライヤー部品"
#: company/api.py:258
msgid "Internal Part is Active"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "製造元"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "会社名"
@@ -4050,8 +4193,8 @@ msgstr "連絡先電話番号"
msgid "Contact email address"
msgstr "連絡先メールアドレス"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "お問い合わせ"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "住所"
@@ -4195,12 +4338,12 @@ msgstr "社内用出荷注意事項"
msgid "Link to address information (external)"
msgstr "住所情報へのリンク(外部)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "ベース部"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "メーカー品番"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "仕入先"
@@ -4254,7 +4397,7 @@ msgstr "仕入先"
msgid "Select supplier"
msgstr "サプライヤーを選択"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "サプライヤー在庫管理ユニット"
@@ -4264,11 +4407,11 @@ msgstr "このサプライヤーは活動していますか?"
#: company/models.py:792
msgid "Primary"
-msgstr ""
+msgstr "プライマリー"
#: company/models.py:793
msgid "Is this the primary supplier part for the linked Part?"
-msgstr ""
+msgstr "これは、リンク先の部品に対する主要サプライヤーの部品でしょうか?"
#: company/models.py:803
msgid "Select manufacturer part"
@@ -4282,16 +4425,16 @@ msgstr "外部サプライヤー部品リンク用URL"
msgid "Supplier part description"
msgstr "サプライヤーの部品説明"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "基本料金"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "ミニマムチャージ(例:仕入れ手数料)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "パッケージング"
@@ -4307,7 +4450,7 @@ msgstr "パック数量"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "1パックに供給される総量。単品の場合は空のままにしてください。"
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "複数"
@@ -4331,25 +4474,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:881 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"
@@ -4503,7 +4646,7 @@ msgstr "元の行データ"
msgid "Errors"
msgstr "エラー"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "有効"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "不明"
@@ -4719,7 +4862,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 "グループ"
@@ -4743,117 +4886,118 @@ msgstr "最大進捗"
msgid "Maximum value for progress type, required if type=progress"
msgstr "進行状況タイプの場合の最大値。type=progress の場合に必須です。"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "注文参照"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "並外れた"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "プロジェクトコード"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "作成者"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "作成前"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "の後に作成されました。"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "開始日あり"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "開始日 前"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "開始日 後"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "目標期日あり"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "目標期日"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "以降の目標日"
-#: order/api.py:230
-msgid "Updated Before"
-msgstr ""
-
#: order/api.py:234
-msgid "Updated After"
-msgstr ""
+msgid "Updated Before"
+msgstr "更新日(開始)"
-#: order/api.py:285
+#: order/api.py:238
+msgid "Updated After"
+msgstr "更新日(終了)"
+
+#: order/api.py:289
msgid "Has Pricing"
msgstr "価格"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "完成前"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "終了後"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "注文"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "注文完了"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "内部パーツ"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "注文保留"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "完了"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "出荷あり"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
-msgstr ""
+msgstr "配送が見つかりません"
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr "注文"
msgid "Sales Order"
msgstr "セールスオーダー"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "リターンオーダー"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr "在庫移動指示"
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "合計金額"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "この注文の合計金額"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "注文通貨"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "この注文はロックされており、変更できません。"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "連絡先が選択した会社と一致しません"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "開始日は目標期日より前でなければなりません。"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "指定の会社と住所が一致しません"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "ご注文内容(任意)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "この注文のプロジェクトコードを選択してください。"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "外部ページへのリンク"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "開始日"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "本注文の開始予定日"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "終了日に達したら"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "お届け予定日この期日を過ぎますと延滞となります。"
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "発行日"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "オーダー発行日"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
-msgstr ""
+msgstr "更新日"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "この注文を担当するユーザーまたはグループ"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "本注文に関する連絡先"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "本注文の会社住所"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "ステータス"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "発注状況"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "注文元の会社"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "サプライヤー・リファレンス"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "サプライヤー注文参照コード"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "受信"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "注文完了日"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "目的地"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "入荷商品のお届け先"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "部品サプライヤーは、POサプライヤーと一致する必要があります。"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "品目が発注書と一致しません"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "行項目にリンクされた部品が不足しています"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "数量は正の数でなければなりません。"
-#: order/models.py:1072
+#: order/models.py:1111
msgid "Serial numbers cannot be assigned to virtual parts"
-msgstr ""
+msgstr "仮想部品にはシリアル番号を割り当てることはできません"
-#: order/models.py:1362 order/models.py:2776 stock/models.py:1085
-#: stock/models.py:1086 stock/serializers.py:1397
+#: order/models.py:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "顧客"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "販売先"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "販売注文状況"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "お客様リファレンス"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "顧客注文参照コード"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "出荷日"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "出荷元"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "注文はすでに完了しています。"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "注文はすでにキャンセルされました"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "未完了の注文にのみ完了マークを付けることができます。"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "出荷に不備があるため、注文を完了できません。"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "割り当てに不備があるため、注文を完了できません。"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "不完全な項目があるため、注文を完了できません。"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "注文はロックされ、変更できません。"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "品目数量"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
-msgstr ""
+msgstr "項番"
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
-msgstr ""
+msgstr "この項目の行番号(任意)"
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "行項目参照"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "項目"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "行項目の説明(オプション)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "この行の補足説明"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "単価"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "発注書項目"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "ビルドオーダーは外部としてマークする必要があります"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "ビルドオーダーはアセンブリ部品にのみリンクできます"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "ビルドオーダーの部品は、ラインアイテムの部品と一致する必要があります。"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr "組立部品には、外部ビルドオーダーが必要です"
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "サプライヤー"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "受信"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "受領品目数"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "購入金額"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "購入単価"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "本品目により完成する外部ビルドオーダー"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "発注書追加行"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "販売注文明細"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "セール価格"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "販売単価"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "発送済み"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "出荷数量"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "販売注文の出荷"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "配送先住所はお客様と一致している必要があります"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "こちらの発送先住所"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "出荷日"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "配達日"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "貨物の引渡日"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "チェック済み"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "発送"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "出荷番号"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "追跡番号"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "貨物追跡情報"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "請求書番号"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "関連する請求書の参照番号"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "発送済み"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "出荷品目に割り当てられた在庫がありません"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "出荷は完了前に必ず確認が必要となります"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "セールスオーダー追加ライン"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "販売注文の割り当て"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "在庫アイテムが割り当てられていません"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "在庫品を別部品のラインに割り当てることはできません。"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "部品のないラインに在庫を割り当てることはできません。"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "割当数量が在庫数量を超えることはできません"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "割当数量はゼロより大きくなければなりません"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "販売注文と出荷が一致しません"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "出荷が販売注文と一致しません"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "ライン"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "販売注文の出荷参照"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "アイテム"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "割り当てるストックアイテムを選択"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "在庫割当数量の入力"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "リターンオーダー参照"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "返品元の会社"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "返品状況"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "返品注文項目"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "在庫品の指定が必要です。"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "返品数量が在庫数量を超える場合"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "返品数量はゼロより大きくなければなりません。"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "シリアル化されたストックアイテムの数量が無効です。"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "お客様から返品する商品を選択"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "受領日"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
-msgstr ""
+msgstr "この返品商品が到着した日付"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "転帰"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "この項目の成果"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "この品目の返品または修理に関連する費用"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "リターンオーダー追加ライン"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr "在庫移動指示コード"
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr "在庫移動指示の状態"
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr "移動元品"
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr "移動先品"
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr "在庫を消費する"
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr "在庫を移動するのではなく、割り当てられた在庫品から移動数量を差し引くことで、それを「消費」します"
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr "移動先が設定されるまで、指示を完了することはできません"
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr "指示は、完全に割り当てられるまで完了しません"
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr "在庫移動指示明細"
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr "移動されました"
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr "移動数"
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr "在庫移動指示の引き当て"
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "注文ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "複製する注文のID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "コピーライン"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "元の注文から行項目をコピー"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "余分な行をコピー"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "元の注文から余分な項目をコピー"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "コピーパラメータ"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
-msgstr ""
+msgstr "元の指示ら指示項目をコピーします"
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "ラインアイテム"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "完成路線"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "重複した注文"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "この注文を複製するためのオプションを指定します。"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "無効なオーダーID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "サプライヤー名"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "ご注文のキャンセルはできません。"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "未完了の行項目で注文を閉じることができます。"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "注文に不備がある場合"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "ご注文は受け付けておりません。"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "自動車価格"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "サプライヤーの部品データに基づいて購入価格を自動計算"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "購入価格通貨"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "アイテムのマージ"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "内部部品番号"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "内部部品名"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "サプライヤー部品の指定が必要"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "注文書の指定が必要"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "サプライヤーは発注書と一致しなければなりません。"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "発注書はサプライヤーと一致している必要があります。"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "明細"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "受取商品の配送先選択"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "入荷在庫品のバッチコード入力"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "有効期限"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "入荷在庫の有効期限の入力"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "入荷した在庫品のシリアル番号の入力"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "入荷在庫品の包装情報の上書き"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "在庫品の入荷に関する注意事項"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "バーコード"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "スキャンされたバーコード"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "バーコードはすでに使用されています"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "項目は必ずご記入ください。"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "デスティネーション・ロケーションを指定する必要があります。"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "バーコードの値は一意でなければなりません。"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "発送"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "完了した出荷"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
-msgstr ""
+msgstr "引き当て済み明細"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "販売価格通貨"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "割当項目"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "出荷の詳細は記載されていません"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "ラインアイテムは、この注文に関連付けられていません。"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "数量は正数でなければなりません。"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr "この在庫品は、必要なすべてのテストに合格していません"
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "割り当てるシリアル番号を入力"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "出荷済み"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "この注文には出荷が関連付けられていません"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "以下のシリアル番号に該当するものは見つかりませんでした。"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "以下のシリアル番号はご利用いただけません。"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "返品注文項目"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "ラインアイテムが返品オーダーと一致しません"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "ラインアイテムはすでに受領済み"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "返品数量"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "ライン価格通貨"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr "引き当てが未完了でも指示を許可"
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr "指示に未完了の引き当てがあります"
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "紛失"
@@ -5661,6 +5879,11 @@ msgstr "返金"
msgid "Reject"
msgstr "拒否"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "発行済"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "期限切れ発注書"
@@ -5696,7 +5919,7 @@ msgstr "スター付き"
msgid "Filter by starred categories"
msgstr "星の数で絞り込む"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "深さ"
@@ -5704,7 +5927,7 @@ msgstr "深さ"
msgid "Filter by category depth"
msgstr "カテゴリの深さでフィルタリング"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "最多メンバーレベル"
@@ -5712,7 +5935,7 @@ msgstr "最多メンバーレベル"
msgid "Filter by top-level categories"
msgstr "トップレベルカテゴリーによるフィルタリング"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "カスケード表示"
@@ -5732,75 +5955,79 @@ msgstr "親カテゴリーによる絞り込み"
msgid "Exclude sub-categories under the specified category"
msgstr "指定したカテゴリの下にあるサブカテゴリを除外します。"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "実績あり"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "バリエーション?"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "改訂版"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "改定あり"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM有効"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "カスケードカテゴリ"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
-msgstr ""
+msgstr "アセンブリ部品はアクティブです"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
-msgstr ""
+msgstr "アセンブリ部品は追跡可能です"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "組み立て部分はテスト可能"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr "アセンブリ部品はロックされています"
+
+#: part/api.py:1319
msgid "Component part is active"
-msgstr ""
+msgstr "コンポーネント部品はアクティブです"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
-msgstr ""
+msgstr "コンポーネント部品は追跡可能です"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "コンポーネント部分はテスト可能"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
-msgstr ""
+msgstr "コンポーネント部品はアセンブリです"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
-msgstr ""
+msgstr "コンポーネント部品は仮想的なものです"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
-msgstr ""
+msgstr "引き当て可能在庫あり"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "用途"
@@ -5809,11 +6036,11 @@ msgstr "用途"
msgid "Part Category"
msgstr "パーツカテゴリ"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "パーツカテゴリ"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "デフォルトの場所"
@@ -5821,7 +6048,7 @@ msgstr "デフォルトの場所"
msgid "Default location for parts in this category"
msgstr "このカテゴリの部品のデフォルトの場所"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "構造に関するパターン"
@@ -5837,12 +6064,12 @@ msgstr "デフォルトキーワード"
msgid "Default keywords for parts in this category"
msgstr "このカテゴリの部品のデフォルトキーワード"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "アイコン"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "アイコン (オプション)"
@@ -5862,984 +6089,1028 @@ msgstr "初期値"
msgid "Default Parameter Value"
msgstr "パラメータのデフォルト値"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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 ""
+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:855
#: report/templates/report/inventree_stock_location_report.html:103
msgid "IPN"
-msgstr "即時支払通知"
+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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "複数販売"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "価格計算のキャッシュに使用される通貨"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "最小BOMコスト"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "構成部品の最低コスト"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "最大BOMコスト"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "構成部品の最大コスト"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "最低購入価格"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "過去の最低購入価額"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "最大購入費用"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "過去の最高購入価格"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "最低社内価格"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "社内価格ブレークに基づく最低コスト"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "社内最高価格"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "社内価格ブレークに基づく最大コスト"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "最低供給価格"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "外部サプライヤーからの部品の最低価格"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "サプライヤー最高価格"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "外部サプライヤーからの部品の最高価格"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "最小バリアントコスト"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "バリアントパーツの最小コストの計算"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "最大バリアントコスト"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "バリアント部品の最大コストの計算"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "最低料金"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "最低コストのオーバーライド"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "最大コスト"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "最大コストのオーバーライド"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "総合的な最小コストの計算"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "総合最大コストの計算"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "最低販売価格"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "価格破壊に基づく最低販売価格"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "最高販売価格"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "価格破壊に基づく最高販売価格"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "最低販売価格"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "過去の最低売却価格"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "最大販売価格"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "過去の最高売却価格"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "ストックテイク用部品"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "個数"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "棚卸時の個別在庫数"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "ストックテイク時の在庫可能量"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "日付"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "ストックテイク実施日"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "最低在庫コスト"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "手元在庫の最低見積原価"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "最大在庫コスト"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "手元在庫の最大見積原価"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "パーツセール価格"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "部品試験テンプレート"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "試験名"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "テストの名前を入力します。"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "テストキー"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "テストの簡易キー"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "試験内容"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "このテストの説明を入力してください。"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "このテストは有効ですか?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "必須"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "このテストは合格するために必要ですか?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "価値が必要"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "このテストは、テスト結果を追加する際に値を必要としますか?"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "アタッチメントが必要"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "このテストで有効な選択肢(カンマ区切り)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr "数量が無効です - 部品に単位が指定されていません"
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr "数量は0以上でなければなりません"
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "BOMアイテムは変更できません - アセンブリがロックされています。"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "親部品を選択"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "サブパート"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "BOMで使用する部品を選択"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr "金額"
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr "1つの部品を製造するために消費される副部品の量"
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "このBOMアイテムのBOM数量"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "この部品表はオプションです。"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "このBOMアイテムは消耗品です。"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "設定数量"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "歩留まり損失"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "丸め倍数"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "必要な生産数量を、この値の倍数に切り上げてください。"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "BOMアイテムリファレンス"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOMアイテムノート"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "チェックサムi"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOMラインのチェックサム"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "検証済み"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "このBOMアイテムは検証済みです"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "継承"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "サブパーツの指定が必要"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOMアイテム代替"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "代用部品はマスター部品と同じにすることはできません。"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "親BOMアイテム"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "代用部品"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "パート #1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "パート #2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "関連部品を選択"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "この関係について"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "部品とそれ自身との間に部品関係を作ることはできません。"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "重複する関係が既に存在します。"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr "サブカテゴリを削除"
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr "このカテゴリに含まれるすべてのサブカテゴリを削除します"
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr "パーツを削除"
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr "このカテゴリに含まれるすべてのパーツを削除します"
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "親カテゴリ"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "親部品カテゴリー"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "サブカテゴリ"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "結果"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "このテンプレートに対して記録された結果の数"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "この在庫商品の購入通貨"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "ファイルが画像ではありません"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "オリジナルパート"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "複製する元の部品を選択"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "コピー画像"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "元の部分から画像をコピー"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "コピーBOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "元の部品から部品表をコピー"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "元の部品からパラメータデータをコピー"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "コピーノート"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "元のパートからメモをコピー"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "コピーテスト"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "元の部品からテスト用テンプレートをコピーしてください"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "初期在庫量"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "初期在庫場所"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "この部品の初期在庫場所を指定してください。"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "サプライヤーを選択してください。"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "メーカーを選択してください。"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "メーカー品番"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "選択された企業は有効なサプライヤーではありません。"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "選択された会社は有効な製造業者ではありません。"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "このMPNに一致するメーカー部品はすでに存在します。"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "このSKUに一致するサプライヤー部品は既に存在します。"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "カテゴリ名"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "建物"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "現在生産中の当該部品の数量"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "この部品の予定生産数量"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "在庫商品"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "リビジョン"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "未割当株式"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "バリアントストック"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "重複部分"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "別のパートから初期データをコピー"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "初期在庫"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "初期在庫数で部品を作成"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "サプライヤー情報"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "この部品の初期サプライヤー情報を追加します。"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "コピーカテゴリパラメータ"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "既存イメージ"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "既存の部品画像のファイル名"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "画像ファイルが存在しません"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "部品表全体の検証"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "ビルド"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "ビルドオーダーに必要なもの"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "ビルドオーダーに割り当てられました"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "セールスオーダーに必要なもの"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "セールスオーダーに割り当てられました"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
-msgstr ""
+msgstr "パートIPN"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
-msgstr ""
+msgstr "部品の説明"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
-msgstr ""
+msgstr "部品を選択すると、その部品(およびそのバリエーション部品)の棚卸し情報を作成します"
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
-msgstr ""
-
-#: part/serializers.py:1358
-msgid "Select a location to include all parts with stock in that location (including sub-locations)"
-msgstr ""
-
-#: part/serializers.py:1365
-msgid "Generate Stocktake Entries"
-msgstr ""
-
-#: part/serializers.py:1366
-msgid "Save stocktake entries for the selected parts"
-msgstr ""
-
-#: part/serializers.py:1373
-msgid "Generate Report"
-msgstr ""
+msgstr "カテゴリを選択すると、そのカテゴリ(およびサブカテゴリ)に含まれるすべての部品が表示されます"
#: part/serializers.py:1374
-msgid "Generate a stocktake report for the selected parts"
-msgstr ""
+msgid "Select a location to include all parts with stock in that location (including sub-locations)"
+msgstr "ロケーションを選択すると、そのロケーション(およびサブロケーション)にあるすべての部品が表示されます"
-#: part/serializers.py:1477
+#: part/serializers.py:1381
+msgid "Generate Stocktake Entries"
+msgstr "棚卸しデータを登録"
+
+#: part/serializers.py:1382
+msgid "Save stocktake entries for the selected parts"
+msgstr "選択した部品の棚卸しデータを保存"
+
+#: part/serializers.py:1389
+msgid "Generate Report"
+msgstr "レポートを生成"
+
+#: part/serializers.py:1390
+msgid "Generate a stocktake report for the selected parts"
+msgstr "選択した部品の棚卸し明細を作成"
+
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "最小価格"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "最低価格の計算値の上書き"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "最低価格通貨"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "最大価格"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "最高価格の計算値を上書き"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "最高価格通貨"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "更新"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "この部品の価格を更新"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "提供された通貨から{default_currency}に変換できませんでした。"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "最低価格は最高価格を超えてはなりません。"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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 ""
+msgid "Amount required for this item (can include units)"
+msgstr "この部品の必要数量(数量単位を含めることができます)"
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "親アセンブリを選択"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "構成部品の選択"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr "数量の形式が不正です"
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "BOMをコピーする部品を選択します。"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "既存データの削除"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "コピー前に既存のBOMアイテムを削除"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "インクルード継承"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "テンプレート化された部品から継承されたBOM項目を含めます。"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "無効な行をスキップ"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "無効な行をスキップするには、このオプションを有効にします。"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "コピー代用部品"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "BOMアイテムの重複時に代替部品をコピー"
@@ -7091,15 +7362,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 "印刷する項目はありません"
@@ -7160,7 +7431,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
@@ -7455,7 +7726,7 @@ msgstr "統合されたSlack通知方法"
#: plugin/builtin/integration/core_notifications.py:131
msgid "Slack incoming webhook URL"
-msgstr ""
+msgstr "Slackの受信Webhook URL"
#: plugin/builtin/integration/core_notifications.py:132
msgid "URL that is used to send messages to a slack channel"
@@ -7506,20 +7777,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を返します。"
@@ -7560,7 +7831,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 "ランドスケープ"
@@ -7643,7 +7914,7 @@ msgstr "「TME」として活動するサプライヤー"
#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169
#: plugin/serializers.py:275
msgid "Only superuser accounts can administer plugins"
-msgstr ""
+msgstr "プラグインの管理ができるのは、スーパーユーザーアカウントのみです"
#: plugin/installer.py:243
msgid "Plugin installation is disabled"
@@ -7651,11 +7922,11 @@ msgstr "プラグインのインストールが無効"
#: plugin/installer.py:273
msgid "No package name or URL provided for installation"
-msgstr ""
+msgstr "インストール用のパッケージ名またはURLが指定されていません"
#: plugin/installer.py:277
msgid "Invalid characters in package name or URL"
-msgstr ""
+msgstr "パッケージ名またはURLに無効な文字が含まれています"
#: plugin/installer.py:287
msgid "Installed plugin successfully"
@@ -7728,7 +7999,7 @@ msgstr "プラグインのキー"
#: plugin/models.py:55
msgid "Name of the plugin"
-msgstr ""
+msgstr "プラグイン名"
#: plugin/models.py:62 plugin/serializers.py:119
msgid "Package Name"
@@ -7762,7 +8033,7 @@ msgstr "パッケージプラグイン"
msgid "Plugin"
msgstr "プラグイン"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "著者は見つかりませんでした"
@@ -7955,7 +8226,7 @@ msgstr "設置未確認"
#: plugin/serializers.py:152
msgid "Either packagename or URL must be provided"
-msgstr ""
+msgstr "パッケージ名またはURLのいずれかを指定する必要があります"
#: plugin/serializers.py:191
msgid "Full reload"
@@ -8021,7 +8292,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 "テンプレートに有効な項目がありません"
@@ -8065,118 +8336,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 "テンプレートクエリフィルタ(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 "アセットファイルの説明"
#: report/serializers.py:37
msgid "User must be authenticated to save report templates"
-msgstr ""
+msgstr "レポートテンプレートを保存するには、ユーザーが認証されている必要があります"
#: report/serializers.py:118
msgid "Select report template"
@@ -8225,13 +8496,10 @@ msgstr "必要な材料"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "部品画像"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "発行済"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "必須"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "シリアル番号"
@@ -8292,7 +8560,7 @@ msgstr "在庫品テストレポート"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "設置項目"
@@ -8325,17 +8593,21 @@ msgstr "結果なし(必須)"
msgid "No result"
msgstr "何も結果はありません"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr "転送されました"
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
-msgstr ""
+msgstr "メディアファイルのパスが不正です"
#: report/templatetags/report.py:185
msgid "Invalid static file path"
-msgstr ""
+msgstr "静的ファイルのパスが不正です"
#: report/templatetags/report.py:287
msgid "Asset file not found"
-msgstr ""
+msgstr "アセットファイルが見つかりません"
#: report/templatetags/report.py:345 report/templatetags/report.py:461
msgid "Image file not found"
@@ -8343,7 +8615,7 @@ msgstr "画像ファイルが見つかりません"
#: report/templatetags/report.py:430
msgid "No image file specified"
-msgstr ""
+msgstr "画像ファイルが指定されていません"
#: report/templatetags/report.py:455
msgid "part_image tag requires a Part instance"
@@ -8353,491 +8625,499 @@ msgstr "part_image タグには Part インスタンスが必要です。"
msgid "company_image tag requires a Company instance"
msgstr "company_image タグには Company インスタンスが必要です。"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "場所の深さによる絞り込み"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "トップレベルのロケーションによるフィルタリング"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "フィルタリング結果にサブロケーションを含めることができます。"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "親の位置"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "親の所在地でフィルタリング"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "部品名(大文字・小文字を区別しません)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "パート名に含まれるもの(大文字・小文字を区別しません)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "部品名(正規表現)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "パートIPN(大文字と小文字を区別しません)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "パートIPNに含まれるもの(大文字と小文字は区別されません)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "パートIPN(正規表現)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "最小在庫"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "最大在庫"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "ステータスコード"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "外部ロケーション"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "ビルド・オーダーで消費"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "その他在庫品に装着"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "パートツリー"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "更新前"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "更新後"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "ストックテイク前"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "ストックテイク後"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "有効期限"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "有効期限"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "期限失効"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "そのアイテムおよびそのすべての子孫を除外するためのStockItemのプライマリキーをご提供ください。"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "カスケードの所在地"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "もし真であれば、指定された場所の子要素に含まれる項目を含めます"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "数値のロケーションID、またはリテラル文字列の「null」でフィルタリングしてください。"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "数量が必要です"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "有効な部品を供給する必要があります。"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "指定されたサプライヤの部品が存在しません。"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "サプライヤー部品にはパックサイズが定義されていますが、use_pack_sizeフラグが設定されていません。"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "追跡不可能な部品については、シリアル番号は提供できません。"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "組み込み済みを含める"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "もし真であれば、指定した在庫アイテムの中に組み込まれている構成部品のテスト結果を含める"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "数値による在庫品IDでの絞り込み"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "ID {id} の在庫品は存在しません"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
-msgstr ""
+msgstr "部品のバリエーションを含める"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
-msgstr ""
+msgstr "日付(終了)"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
-msgstr ""
+msgstr "日付(開始)"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "在庫ロケーションタイプ"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "ストックロケーションの種類"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "アイコンが設定されていないすべての場所のデフォルトアイコン (オプション)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "ストックロケーション"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "在庫場所"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "所有者"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "所有者を選択"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "外部"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "これは外部の在庫場所です。"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "ロケーションタイプ"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "このロケーションのロケーションタイプ"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr "シリアル番号管理対象の在庫品は削除できません"
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field}は存在しません"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "部品の指定が必要"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "在庫品は、構造的な在庫場所に配置することはできません!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr "シリアル番号の編集はできません。この商品にはすでにシリアル番号が割り当てられています"
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "仮想部品にストックアイテムを作成できません"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "シリアル番号のある商品は数量が1でなければなりません。"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "数量が1以上の場合、シリアル番号は設定できません。"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "アイテムはそれ自身に属することはできません"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "is_building=Trueの場合、アイテムはビルド・リファレンスを持っていなければならない。"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "ビルド参照が同じ部品オブジェクトを指していません。"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "親株式"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "ベース部"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "この在庫品に一致するサプライヤー部品を選択してください"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "この在庫品はどこにありますか?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "この在庫品は以下の梱包で保管されています。"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "設置場所"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "このアイテムは他のアイテムにインストールされていますか?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "この商品のシリアル番号"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "このストックアイテムのバッチコード"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "在庫数"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "ソースビルド"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "このストックアイテムのビルド"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "消費者"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "このストックアイテムを消費したビルドオーダー"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "発注元"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "この在庫商品の購入注文"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "販売先オーダー"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "在庫品の有効期限。この日を過ぎると在庫は期限切れとなります。"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "枯渇時に削除"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "在庫がなくなったら、このストックアイテムを削除します。"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "購入時の単品購入価格"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "パートに変換"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "数量が在庫数を超えています"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "部品が追跡可能に設定されていません"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "数量は整数でなければなりません。"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "数量は在庫数 ({self.quantity}) を超えてはなりません。"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "シリアル番号はリストとして提供されなければなりません"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "数量がシリアル番号と一致しません"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr "構造上ロケーションに在庫を割り当てることはできません"
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "テストテンプレートが存在しません"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "在庫商品が販売注文に割り当てられました"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "ストックアイテムが他のアイテムに装着されている場合"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "在庫商品には他の商品が含まれています。"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "在庫商品が顧客に割り当てられました"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "在庫品は現在生産中です。"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "連番在庫の統合はできません"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "在庫品の重複"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "在庫品目は同じ部品を参照してください。"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "在庫品は同じサプライヤーの部品を参照する必要があります。"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "在庫状況コードが一致していること"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "在庫がないため移動できません。"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "ストックアイテムのトラッキング"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "記入上の注意"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "在庫品テスト結果"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "このテストには値を指定する必要があります。"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "このテストには添付ファイルをアップロードする必要があります。"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "このテストでは無効な値です。"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "試験結果"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "テスト出力値"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "試験結果添付"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "テストノート"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "テストステーション"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "試験が実施された試験ステーションの識別子。"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "開始"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "テスト開始のタイムスタンプ"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "修了済み"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "テスト終了のタイムスタンプ"
@@ -8913,214 +9193,234 @@ msgstr "数量はパック数です。"
msgid "Use pack size"
msgstr "パッケージサイズを使用"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "新しい商品のシリアル番号の入力"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "サプライヤー品番"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "期限切れ"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "子供用品"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "追跡項目"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "この在庫品の購入価格、単位またはパックあたり"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "シリアル化するストックアイテムの数を入力"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "在庫品目がしていされていません"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "数量は在庫数 ({q}) を超えてはなりません。"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "仕向け地"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "この部品にシリアル番号を割り当てることはできません"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "シリアル番号が既に存在します"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "インストールするストックアイテムを選択"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "設置数量"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "インストールするアイテムの数量を入力してください。"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "取引メモの追加(オプション)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "設置数量は1台以上"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "在庫がありません"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "選択した部品が部品表にない"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "設置する数量は、利用可能な数量を超えてはなりません。"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "アンインストール先の場所"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "在庫品を変換する部品を選択"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "選択された部分は、変換のための有効なオプションではありません。"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "SupplierPartが割り当てられている在庫品を変換できません。"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "在庫商品ステータスコード"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "ステータスを変更するストックアイテムを選択"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "ストックアイテムが選択されていません"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "サブロケーション"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr "在庫品を削除"
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr "このロケーションにあるすべての在庫品を削除します"
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr "サブロケーションを削除"
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr "このロケーションに含まれるすべてのサブロケーションを削除します"
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "親株式所在地"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "パーツは販売可能でなければなりません"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "商品が販売オーダーに割り当てられています。"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr "部品がが在庫移動指示にに引き当てられました"
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "アイテムがビルドオーダーに割り当てられています。"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "在庫アイテムを割り当てるお客様"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "選択された企業は顧客ではありません"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "株式譲渡に関する注意事項"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "在庫品のリストが必要です。"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "株式併合に関する注意事項"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "不一致のサプライヤーを許可"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "異なるサプライヤの部品を持つ在庫品目をマージできるようにします。"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "不一致の状態を許可"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "異なるステータスコードを持つストックアイテムをマージすることができます。"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "少なくとも2つのストックアイテムを提供する必要があります。"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "変化なし"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "StockItem 主キー値"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "在庫がありません"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "在庫品目は既に在庫にあります"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "数量は負の数であってはなりません。"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "株式取引に関する注記"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "既存の在庫に統合します"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "可能なら、返品された商品を既存の在庫商品に統合してください"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "次のシリアル番号"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "以前のシリアル番号"
@@ -9458,150 +9758,158 @@ 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 "ユーザーのプライマリグループ"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "管理者"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr "部品表"
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "購入注文"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "セールスオーダー"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "返品注文"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr "在庫移動指示"
+
#: users/serializers.py:186
msgid "Username"
msgstr "ユーザー名"
@@ -9628,19 +9936,19 @@ msgstr "ユーザーのメールアドレス"
#: users/serializers.py:240
msgid "User must be authenticated"
-msgstr ""
+msgstr "ユーザーは認証されている必要があります"
#: users/serializers.py:249
msgid "Only a superuser can create a token for another user"
-msgstr ""
+msgstr "他のユーザー用トークンを作成できるのは、スーパーユーザーのみです"
#: users/serializers.py:329
msgid "Administrator"
-msgstr ""
+msgstr "管理者"
#: users/serializers.py:330
msgid "Does this user have administrative permissions"
-msgstr ""
+msgstr "このユーザーには管理者権限がありますか"
#: users/serializers.py:335 users/serializers.py:424
msgid "Superuser"
@@ -9676,11 +9984,11 @@ msgstr "パスワードルールに関する警告を無効にする"
#: users/serializers.py:417
msgid "Staff"
-msgstr ""
+msgstr "スタッフ"
#: users/serializers.py:418
msgid "Does this user have staff permissions"
-msgstr ""
+msgstr "このユーザーにはスタッフ権限がありますか?"
#: users/serializers.py:468
msgid "You do not have permission to create users"
diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po
index c1cef67db4..25d587adaa 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "{original}을(를) {unit}(으)로 변환할 수 없습니다"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "잘못된 수량이 제공되었습니다"
@@ -104,13 +105,13 @@ msgstr "날짜 입력"
msgid "Invalid decimal value"
msgstr "잘못된 소수 값"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "메모"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "설명"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "설명 (선택 사항)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "유효한 숫자여야 합니다"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "통화"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "주문 상태"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "직상위 빌드"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "변형(Variant) 포함"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "변형(Variant) 포함"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "변형(Variant) 포함"
msgid "Part"
msgstr "부품"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "분류"
@@ -605,7 +593,7 @@ msgstr "분류"
msgid "Ancestor Build"
msgstr "상위 계층 빌드"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "나에게 할당 됨"
@@ -653,374 +641,365 @@ msgstr "완료일 이전"
msgid "Completed after"
msgstr "완료일 이후"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "최소 날짜"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "최대 날짜"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "트리 제외"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "빌드를 삭제하려면 먼저 취소해야 합니다"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "소모품"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "선택사항"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "조립품"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "추적됨"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "테스트 가능"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "미결 주문"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "할당됨"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "소모됨"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "주문 중"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr "빌드를 찾을 수 없습니다"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "작업 지시서"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "위치"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "산출물"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "산출물 재고 항목 ID로 필터링합니다. 설치되지 않은 빌드 항목을 찾으려면 'null'을 사용하세요."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "작업 지시서"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "조립품 BOM이 검증되지 않았습니다"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "비활성 부품에 대해서는 작업 지시서를 생성할 수 없습니다"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "잠금 해제된 부품에 대해서는 작업 지시서를 생성할 수 없습니다"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "외부 이행은 구매 가능한 부품에 대해서만 가능합니다"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "담당 사용자 또는 그룹을 지정해야 합니다"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "작업 지시서 부품은 변경할 수 없습니다"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "목표일은 시작일 이후여야 합니다"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "작업 지시서 참조번호"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "참조"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "빌드에 대한 간단한 설명 (선택 사항)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "이 빌드가 할당된 작업 지시서"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "빌드할 부품을 선택하세요"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "판매 주문 참조"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "이 빌드가 할당된 판매 주문"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "원본 위치"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "이 빌드에 사용할 재고를 가져올 위치를 선택하세요 (비워두면 어떤 재고 위치에서든 가져옵니다)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "외주 생산"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "이 작업 지시서는 외주로 생산됩니다"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "대상 위치"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "완료된 항목이 보관될 위치를 선택하세요"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "빌드 수량"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "빌드할 재고 항목 수"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "완료된 항목"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "완료된 재고 항목 수"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "빌드 상태"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "빌드 상태 코드"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "배치 코드"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "생성일"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "빌드 시작일"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "이 작업 지시서의 예정 시작일"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "목표 완료일"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "완료일"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "완료자"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "발행자"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "이 작업 지시서를 발행한 사용자"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "담당"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "외부 링크"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "외부 URL로 연결"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "빌드 우선순위"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "이 빌드 주문의 우선순위"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "프로젝트 코드"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "이 빌드 주문의 프로젝트 코드"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "진행 중인 하위 빌드가 있는 상태에서는 작업 지시서를 완료할 수 없습니다"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "미완료 산출물이 있는 상태에서는 작업 지시서를 완료할 수 없습니다"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "빌드 자재 할당 완료 처리를 위한 작업 실행에 실패했습니다"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "작업 지시서 {build}이(가) 완료되었습니다"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "작업 지시서가 완료되었습니다"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "생산 완제품이 지정되지 않았습니다"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "생산 완제품이 이미 완료되었습니다"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "생산 완제품이 작업 지시서와 일치하지 않습니다"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "수량은 0보다 커야 합니다"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "수량은 산출물 수량보다 클 수 없습니다"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "할당된 재고 항목이 아직 생산 중입니다"
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "소요 자재 품목"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "빌드 객체"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "빌드 객체"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "수량"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "작업 지시서에 필요한 수량"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "소모된 재고 수량"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "할당 수량은 0보다 커야 합니다"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "할당 수량({q})은 사용 가능한 재고 수량({a})을 초과할 수 없습니다"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "재고 항목이 과다 할당되었습니다"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "재고 항목"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "원본 재고 항목"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "빌드에 할당할 재고 수량"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "설치 대상"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "대상 재고 항목"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "빌드 레벨"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "부품명"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "빌드 산출물"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "빌드 산출물이 상위 빌드와 일치하지 않습니다"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "산출물 부품이 빌드 주문 부품과 일치하지 않습니다"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "이 빌드 산출물은 이미 완료되었습니다"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "이 빌드 산출물은 완전히 할당되지 않았습니다"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "빌드 산출물 수량을 입력하세요"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "추적 가능한 부품에는 정수 수량이 필요합니다"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "시리얼 번호 (일련번호)"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "빌드 산출물의 시리얼 번호를 입력하세요"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "빌드 산출물의 재고 위치"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "시리얼 번호 자동 할당"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "다음 시리얼 번호는 이미 존재하거나 유효하지 않습니다"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "빌드 산출물 목록을 제공해야 합니다"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "폐기된 산출물의 재고 위치"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "할당 폐기"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "폐기된 산출물에 대한 모든 재고 할당을 폐기합니다"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "빌드 산출물 폐기 사유"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "완료된 빌드 산출물의 위치"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "불완전한 할당 허용"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "재고가 완전히 할당되지 않았더라도 산출물을 완료합니다"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "할당된 재고 소모"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "이 빌드에 이미 할당된 모든 재고를 소모합니다"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "미완료 산출물 제거"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "완료되지 않은 모든 빌드 산출물을 삭제합니다"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "허용되지 않음"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "이 빌드 주문에 의해 소모된 것으로 수락"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "이 빌드 주문을 완료하기 전에 할당을 해제하세요"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "과다 할당된 재고"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "빌드 주문에 추가로 할당된 재고 항목을 어떻게 처리하시겠습니까"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "일부 재고 항목이 과다 할당되었습니다"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "미할당 수락"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음을 수락합니다"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "필요한 재고가 완전히 할당되지 않았습니다"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "불완전 수락"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "필요한 개수의 빌드 산출물이 완료되지 않았음을 수락합니다"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "필요한 빌드 수량이 완료되지 않았습니다"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "작업 지시서에 진행 중인 하위 작업 지시서가 있습니다"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "작업 지시서는 생산 상태여야 합니다"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "작업 지시서에 미완료 산출물이 있습니다"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "빌드 라인"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "생산 완제품"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "생산 완제품은 동일한 빌드를 가리켜야 합니다"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "빌드 라인 항목"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part는 빌드 주문과 동일한 부품을 가리켜야 합니다"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "항목은 재고에 있어야 합니다"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "사용 가능한 수량({q})을 초과했습니다"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니다"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "할당 항목을 제공해야 합니다"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "부품을 공급할 재고 위치 (비워두면 어떤 위치에서든 가져옵니다)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "위치 제외"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "선택한 위치의 재고 항목을 제외합니다"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "상호 대체 가능한 재고"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "여러 위치에 있는 재고 품목을 서로 대체하여 사용할 수 있습니다"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "대체 재고"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "대체 부품 할당을 허용합니다"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "선택 항목"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "빌드 주문에 선택 BOM 항목을 할당합니다"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "모든 항목"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "비추적 항목"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "추적 항목"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "항목 유형"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "자동 할당할 항목 유형을 선택하세요"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOM 참조"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOM 부품 ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "BOM 부품명"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "설치 대상"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "빌드"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "공급업체 부품"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "할당 수량"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "빌드 참조"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "부품 카테고리 이름"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "추적 가능"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "상속됨"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "변형(Variant) 허용"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "BOM 항목"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "생산 중"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "빌드 예정"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "외부 재고"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "사용 가능 재고"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "사용 가능 대체 재고"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "사용 가능 변형(Variant) 재고"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "소모 수량이 할당 수량을 초과합니다"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "재고 소모에 대한 선택 메모"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "빌드 항목은 올바른 빌드 주문을 가리켜야 합니다"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "빌드 항목 할당이 중복되었습니다"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "빌드 라인은 올바른 빌드 주문을 가리켜야 합니다"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "빌드 라인 할당이 중복되었습니다"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "최소 하나의 항목 또는 라인을 제공해야 합니다"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "대기 중"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "생산"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "보류"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "취소됨"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "완료"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "작업 지시서 {build}이(가) 완료되었습니다"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "작업 지시서가 완료되었습니다"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "빌드 주문에 재고가 필요합니다"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "빌드 주문 {build}에 추가 재고가 필요합니다"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "기한 초과 빌드 주문"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "빌드 주문 {bo}이(가) 기한을 초과했습니다"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "링크 여부"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "파일 여부"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "사용자에게 이 첨부파일들을 삭제할 권한이 없습니다"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "사용자에게 이 첨부파일을 삭제할 권한이 없습니다"
@@ -1554,794 +1553,835 @@ msgstr "플러그인 없음"
msgid "Project Code Label"
msgstr "프로젝트 코드 라벨"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "업데이트됨"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "마지막 업데이트 타임스탬프"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "업데이트 사용자"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "이 객체를 마지막으로 업데이트한 사용자"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "고유 프로젝트 코드"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "프로젝트 설명"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "이 프로젝트의 담당 사용자 또는 그룹"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "설정 키"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "설정 값"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "선택한 값이 유효한 옵션이 아닙니다"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "값은 불리언(Boolean)이어야 합니다"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "값은 정수여야 합니다"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "값은 유효한 숫자여야 합니다"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "값이 유효성 검사 기준을 통과하지 못했습니다"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "가격 구간 수량"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "가격"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "지정 수량에서의 단가"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "엔드포인트"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "이 웹훅을 수신하는 엔드포인트"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "이 웹훅의 이름"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "이 웹훅이 활성 상태인가요"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "토큰"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "접근용 토큰"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "시크릿"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "HMAC용 공유 시크릿"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "메시지 ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "이 메시지의 고유 식별자"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "호스트"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "이 메시지를 수신한 호스트"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "헤더"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "이 메시지의 헤더"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "본문"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "이 메시지의 본문"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "이 메시지를 수신한 엔드포인트"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "처리됨"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "이 메시지 처리가 완료되었나요?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "제목"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "링크"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "게시됨"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "작성자"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "요약"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "읽음"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "이 뉴스 항목을 읽었나요?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "이미지 파일"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "이 이미지의 대상 모델 유형"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "이 이미지의 대상 모델 ID"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "사용자 정의 단위"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "단위 기호는 고유해야 합니다"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "단위 이름은 유효한 식별자여야 합니다"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "단위 이름"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "기호"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "선택 단위 기호"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "정의"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "단위 정의"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "첨부파일"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "파일 누락"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "외부 링크 누락"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "모델 유형"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "이미지의 대상 모델 유형"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "첨부할 파일을 선택하세요"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "댓글"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "첨부파일 댓글"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "업로드 날짜"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "파일이 업로드된 날짜"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "파일 크기"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "바이트 단위의 파일 크기"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "첨부파일에 대해 유효하지 않은 모델 유형이 지정되었습니다"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "사용자 정의 상태"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "사용자 정의 상태"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "참조 상태 세트"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "이 사용자 정의 상태로 확장되는 상태 세트"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "논리 키"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "값"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "모델 데이터베이스에 저장될 숫자 값"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "상태 이름"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "라벨"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "프론트엔드에 표시될 라벨"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "색상"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "프론트엔드에 표시될 색상"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "모델"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "이 상태가 연결된 모델"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "모델을 선택해야 합니다"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "키를 선택해야 합니다"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "논리 키를 선택해야 합니다"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "키는 논리 키와 달라야 합니다"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "유효한 참조 상태 클래스가 제공되어야 합니다"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "키는 참조 상태의 논리 키들과 달라야 합니다"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "논리 키는 참조 상태의 논리 키 목록에 포함되어야 합니다"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "선택 목록"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "선택 목록"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "선택 목록 이름"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "선택 목록 설명"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "잠김"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "이 선택 목록이 잠겨 있나요?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "이 선택 목록을 사용할 수 있나요?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "소스 플러그인"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "선택 목록을 제공하는 플러그인"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "소스 문자열"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "이 목록에 사용된 소스를 식별하는 선택 문자열"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "기본 항목"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "이 선택 목록의 기본 항목"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "생성됨"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "선택 목록이 생성된 날짜 및 시간"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "마지막 업데이트"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "선택 목록이 마지막으로 업데이트된 날짜 및 시간"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "선택 목록 항목"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "선택 목록 항목"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "이 항목이 속한 선택 목록"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "선택 목록 항목의 값"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "선택 목록 항목 라벨"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "선택 목록 항목 설명"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "이 선택 목록 항목이 활성 상태인가요?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "매개변수 템플릿"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "매개변수 템플릿"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "선택지는 고유해야 합니다"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "매개변수 템플릿 이름은 고유해야 합니다"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "이 매개변수 템플릿의 대상 모델 유형"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "매개변수 이름"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "단위"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "이 매개변수의 물리 단위"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "매개변수 설명"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "체크박스"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "이 매개변수는 체크박스인가요?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "선택지"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "이 매개변수의 선택 목록"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "사용"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "이 매개변수 템플릿을 사용하나요?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "매개변수"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "매개변수"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "모델 ID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "매개변수 템플릿"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "데이터"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "매개변수 값"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "메모"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "선택적 메모 필드"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "바코드 스캔"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "바코드 데이터"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "바코드를 스캔한 사용자"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "타임스탬프"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "바코드 스캔 날짜 및 시간"
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr "바코드를 처리한 URL 엔드포인트"
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "컨텍스트"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "바코드 스캔의 컨텍스트 데이터"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "응답"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "결과"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "바코드 스캔이 성공했나요?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "오류가 발생했습니다"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "이메일 메시지"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "이메일 메시지"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "공지됨"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "전송됨"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "실패"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "전달됨"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "확인됨"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "수신"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "발신"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "회신 없음"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "전달 추적"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "읽음 추적"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "클릭 추적"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "전역 ID"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "스레드 ID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "스레드"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "이 메시지에 연결된 스레드"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "우선순위"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "이메일 스레드"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "이메일 스레드"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "이 스레드의 고유 키(스레드 식별에 사용)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "이 스레드의 고유 식별자"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "내부 시작"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "이 스레드는 내부에서 시작되었나요?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "스레드가 생성된 날짜 및 시간"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "스레드가 마지막으로 업데이트된 날짜 및 시간"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "항목 수령됨"
@@ -2451,25 +2491,25 @@ msgstr "키워드 인수"
msgid "Task keyword arguments"
msgstr "작업 키워드 인수"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "모델 유형"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "이 모델의 첨부파일을 생성하거나 편집할 권한이 없습니다"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "이 모델의 매개변수를 생성하거나 편집할 권한이 없습니다"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "선택 목록이 잠겨 있습니다"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "일"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "사용할 환율 업데이트 플러그인"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "URL에서 다운로드"
+msgid "Upload Size Limit"
+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 "다운로드 크기 제한"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "URL 검증 시 스키마 지정을 요구합니다"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "업데이트 확인 간격"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "업데이트를 확인하는 주기(0으로 설정하면 비활성화)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "자동 백업"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "데이터베이스 및 미디어 파일의 자동 백업을 활성화합니다"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "자동 백업 간격"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "자동 백업 이벤트 사이의 일 수를 지정합니다"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "작업 삭제 간격"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "백그라운드 작업 결과는 지정한 일 수 이후 삭제됩니다"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "오류 로그 삭제 간격"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "오류 로그는 지정한 일 수 이후 삭제됩니다"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "알림 삭제 간격"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "사용자 알림은 지정한 일 수 이후 삭제됩니다"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "이메일 삭제 간격"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "이메일 메시지는 지정한 일 수 이후 삭제됩니다"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "이메일 로그 보호"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "이메일 로그 항목 삭제를 방지합니다"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "바코드 지원"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "웹 인터페이스에서 바코드 스캐너 지원을 활성화합니다"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "바코드 결과 저장"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "바코드 스캔 결과를 데이터베이스에 저장합니다"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "바코드 스캔 최대 개수"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "저장할 바코드 스캔 결과의 최대 개수"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "바코드 입력 지연"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "바코드 입력 처리 지연 시간"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "바코드 웹캠 지원"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "브라우저에서 웹캠을 통한 바코드 스캔을 허용합니다"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "바코드 데이터 표시"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "브라우저에 바코드 데이터를 텍스트로 표시합니다"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "바코드 생성 플러그인"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "내부 바코드 데이터 생성에 사용할 플러그인"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "부품 리비전"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "부품에 리비전 필드를 활성화합니다"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "조립품 리비전만"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "조립 부품에만 리비전을 허용합니다"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "조립품에서 삭제 허용"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "조립품에 사용되는 부품의 삭제를 허용합니다"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN 정규식"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "부품 IPN과 일치시키기 위한 정규식 패턴"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "IPN 중복 허용"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "여러 부품이 동일한 IPN을 공유하도록 허용합니다"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "IPN 편집 허용"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "부품 편집 중 IPN 값 변경을 허용합니다"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "부품 BOM 데이터 복사"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "부품을 복제할 때 기본으로 BOM 데이터를 복사합니다"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "부품 매개변수 데이터 복사"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "부품을 복제할 때 기본으로 매개변수 데이터를 복사합니다"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "부품 테스트 데이터 복사"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "부품을 복제할 때 기본으로 테스트 데이터를 복사합니다"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "카테고리 매개변수 템플릿 복사"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "부품을 생성할 때 카테고리 매개변수 템플릿을 복사합니다"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "부품은 기본적으로 템플릿입니다"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "구성요소"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "구매 가능"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "부품은 기본적으로 구매 가능합니다"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "판매 가능"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "부품은 기본적으로 판매 가능합니다"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "부품은 기본적으로 추적 가능합니다"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "가상"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "부품은 기본적으로 가상입니다"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "관련 부품 표시"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "부품에 대한 관련 부품을 표시합니다"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "초기 재고 데이터"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "새 부품 추가 시 초기 재고 생성을 허용합니다"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "초기 공급업체 데이터"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "새 부품 추가 시 초기 공급업체 데이터 생성을 허용합니다"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "부품명 표시 형식"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "부품명을 표시하는 형식"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "부품 카테고리 기본 아이콘"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "부품 카테고리 기본 아이콘(비워두면 아이콘 없음)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "가격 최소 소수 자릿수"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "가격 데이터를 표시할 때 최소 소수 자릿수"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "가격 최대 소수 자릿수"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "가격 데이터를 표시할 때 최대 소수 자릿수"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "공급업체 가격 사용"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "전체 가격 계산에 공급업체 수량별 가격을 포함합니다"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "구매 이력 우선"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "과거 구매 주문 가격이 공급업체 수량별 가격보다 우선합니다"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "재고 항목 가격 사용"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "가격 계산에 수동으로 입력한 재고 데이터의 가격을 사용합니다"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "재고 항목 가격 유효 기간"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "가격 계산에서 지정한 일 수보다 오래된 재고 항목을 제외합니다"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "변형(Variant) 가격 사용"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "전체 가격 계산에 변형(Variant) 가격을 포함합니다"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "활성 변형만"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "변형(Variant) 가격 계산에 활성 변형 부품만 사용합니다"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "가격 자동 업데이트"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "내부 데이터가 변경되면 부품 가격을 자동으로 업데이트"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "가격 재구성 간격"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "부품 가격이 자동으로 업데이트되기까지의 일 수"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "내부 가격"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "부품에 대해 내부 가격 사용"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "내부 가격 우선 적용"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "가능한 경우 내부 가격이 가격 범위 계산보다 우선합니다"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr "BOM 수량 0 허용"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "라벨 인쇄 사용"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "웹 인터페이스에서 라벨 인쇄를 사용합니다"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "라벨 이미지 DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "라벨 인쇄 플러그인에 제공할 이미지 파일 생성 시 DPI 해상도"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "보고서 사용"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "보고서 생성을 사용합니다"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "디버그 모드"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "디버그 모드에서 보고서 생성(HTML 출력)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "보고서 오류 로그"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "페이지 크기"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "PDF 보고서의 기본 페이지 크기"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "매개변수 단위 강제"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "단위가 제공된 경우, 매개변수 값은 지정된 단위와 일치해야 합니다"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "전역 고유 시리얼"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "재고 항목의 시리얼 번호는 전역적으로 고유해야 합니다"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "소진된 재고 삭제"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "재고 항목이 소진되었을 때의 기본 동작을 결정합니다"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "배치 코드 템플릿"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "재고 항목의 기본 배치 코드를 생성하기 위한 템플릿"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "재고 만료"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "재고 만료 기능 사용"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "만료 재고 판매"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "만료된 재고의 판매를 허용합니다"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "재고 경과 시간"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "만료 전 재고 항목을 오래된 것으로 간주하는 일 수"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "만료 재고로 빌드"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "만료된 재고로 빌드하는 것을 허용합니다"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "재고 소유권 제어"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "재고 위치 및 항목에 대한 소유권 제어를 사용합니다"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "재고 위치 기본 아이콘"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "재고 위치 기본 아이콘(비어 있으면 아이콘 없음)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "설치된 재고 항목 표시"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "재고 표에서 설치된 재고 항목을 표시합니다"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "항목 설치 시 BOM 확인"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "설치된 재고 항목은 상위 부품의 BOM에 존재해야 합니다"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "재고 없음 상태 이동 허용"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "작업 지시서 참조번호 패턴"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "각 주문에는 책임자가 지정되어야 합니다"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "활성 부품 필수"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "비활성 부품에 대해 작업 지시서 생성을 방지합니다"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "잠긴 부품 필수"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "잠기지 않은 부품에 대해 작업 지시서 생성을 방지합니다"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "유효한 BOM 필수"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "BOM이 검증되지 않으면 작업 지시서 생성을 방지합니다"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "하위 주문 종료 필수"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "모든 하위 주문이 종료될 때까지 작업 지시서 완료를 방지합니다"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "외주 생산 작업 지시서"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "외주 생산 작업 지시서 기능 사용"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "테스트 통과 전까지 차단"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "필수 테스트가 모두 통과될 때까지 생산 완제품 완료를 방지합니다"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "반품 주문 사용"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "사용자 인터페이스에서 반품 주문 기능을 사용합니다"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "반품 주문 참조 패턴"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "반품 주문 참조 필드를 생성하기 위한 필수 패턴"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "완료된 반품 주문 편집"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "반품 주문이 완료된 후에도 편집을 허용합니다"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "판매 주문 참조 패턴"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "판매 주문 참조 필드를 생성하기 위한 필수 패턴"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "판매 주문 기본 배송"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "판매 주문과 함께 기본 배송 생성 사용"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "완료된 판매 주문 편집"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "판매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "배송 확인 필요"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "항목이 확인될 때까지 배송 완료를 방지합니다"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "배송된 주문을 완료로 표시"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "\"배송됨\" 상태를 건너뛰고, 배송된 것으로 표시된 판매 주문을 자동으로 완료 처리합니다"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "구매 주문 참조 패턴"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "구매 주문 참조 필드를 생성하기 위한 필수 패턴"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "완료된 구매 주문 편집"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "구매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "통화 변환"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "재고 수령 시 항목 값을 기준 통화로 변환합니다"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "구매 주문 자동 완료"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "모든 라인 항목을 수령하면 구매 주문을 자동으로 완료로 표시합니다"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "비밀번호 찾기 사용"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "로그인 페이지에서 비밀번호 찾기 기능을 사용합니다"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "회원가입 사용"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "로그인 페이지에서 사용자 자기 등록(회원가입)을 사용합니다"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "SSO 사용"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "로그인 페이지에서 SSO를 사용합니다"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "SSO 등록 사용"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "로그인 페이지에서 SSO를 통한 자기 등록(회원가입)을 사용합니다"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "SSO 그룹 동기화 사용"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "IdP에서 제공하는 그룹과 InvenTree 그룹의 동기화를 사용합니다"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "SSO 그룹 키"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr "IdP에서 제공하는 groups 클레임 속성의 이름"
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr "SSO 그룹 매핑"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "SSO 외부 그룹 제거"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "이메일 필수"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "회원가입 시 이메일 입력을 요구합니다"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "SSO 사용자 자동 입력"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "SSO 계정 데이터에서 사용자 상세 정보를 자동으로 채웁니다"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "이메일 2회 입력"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "회원가입 시 이메일을 두 번 입력하도록 요청합니다"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "비밀번호 2회 입력"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "회원가입 시 비밀번호를 두 번 입력하도록 요청합니다"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "허용된 도메인"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "특정 도메인으로 회원가입을 제한합니다(쉼표로 구분, @로 시작)"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "회원가입 시 그룹"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "MFA 강제"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "사용자는 다중 요소 보안을 사용해야 합니다."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "시작 시 플러그인 확인"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr "시작 시 모든 플러그인이 설치되어 있는지 확인합니다(컨테이너 환경에서 사용)"
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "플러그인 업데이트 확인"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "설치된 플러그인의 업데이트를 주기적으로 확인합니다"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "URL 통합 사용"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "플러그인이 URL 라우트를 추가할 수 있도록 허용합니다"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "내비게이션 통합 사용"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "플러그인이 내비게이션에 통합될 수 있도록 허용합니다"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "앱 통합 사용"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "플러그인이 앱을 추가할 수 있도록 허용합니다"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "스케줄 통합 사용"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "플러그인이 예약 작업을 실행할 수 있도록 허용합니다"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "이벤트 통합 사용"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "플러그인이 내부 이벤트에 응답할 수 있도록 허용합니다"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "인터페이스 통합 사용"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "플러그인이 사용자 인터페이스에 통합될 수 있도록 허용합니다"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "메일 통합 사용"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "플러그인이 발신/수신 메일을 처리할 수 있도록 허용합니다"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "프로젝트 코드 사용"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "프로젝트를 추적하기 위한 프로젝트 코드를 사용합니다"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr "재고 실사 사용"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "과거 재고 수준과 가치를 기록하는 기능을 사용합니다"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "외부 위치 제외"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr "외부 위치의 재고 품목을 재고 실사 계산에서 제외합니다"
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "자동 재고 실사 주기"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr "자동 재고 실사 기록 간격(일)"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr "오래된 재고 실사 항목 삭제"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr "지정된 일수보다 오래된 재고 실사 항목을 삭제합니다"
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr "재고 실사 삭제 간격"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr "재고 실사 항목은 지정된 일수 후 삭제됩니다"
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "오래된 재고 추적 항목 삭제"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr "지정된 일수보다 오래된 재고 추적 항목을 삭제합니다"
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr "재고 추적 삭제 간격"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr "재고 추적 항목은 지정된 일수 후 삭제됩니다"
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "사용자 전체 이름 표시"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "사용자 이름 대신 사용자 전체 이름을 표시합니다"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "사용자 프로필 표시"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "프로필 페이지에 사용자 프로필을 표시합니다"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "테스트 스테이션 데이터 사용"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "테스트 결과를 위한 테스트 스테이션 데이터 수집을 사용합니다"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "장비 핑 사용"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "등록된 장비의 상태를 확인하기 위해 주기적으로 핑 작업을 수행합니다"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "비활성화: 전체 카테고리 경로를 마우스오버 툴팁으로 표시합니다. 활성화: 전체 카테고리 경로를 일반 텍스트로 표시합니다."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "오류 보고서 수신"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "시스템 오류에 대한 알림을 수신"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "마지막으로 사용한 인쇄 장비"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "사용자의 마지막 사용 인쇄 장비를 저장"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "모든 모델"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "첨부 모델 유형이 제공되지 않았습니다"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "잘못된 첨부 모델 유형입니다"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "최소 자리수는 최대 자리수보다 클 수 없습니다"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "최대 자리수는 최소 자리수보다 작을 수 없습니다"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "빈 도메인은 허용되지 않습니다."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "잘못된 도메인 이름: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "값은 대문자여야 합니다"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "값은 유효한 변수 식별자여야 합니다"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "제조사"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "회사"
@@ -4050,8 +4193,8 @@ msgstr "연락처 전화번호"
msgid "Contact email address"
msgstr "연락처 이메일 주소"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "담당자"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "주소"
@@ -4195,12 +4338,12 @@ msgstr "내부용 배송 메모"
msgid "Link to address information (external)"
msgstr "주소 정보 링크(외부)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "기본 부품"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "제조사 부품 번호"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "공급업체"
@@ -4254,7 +4397,7 @@ msgstr "공급업체"
msgid "Select supplier"
msgstr "공급업체 선택"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "공급업체 SKU"
@@ -4282,16 +4425,16 @@ msgstr "외부 공급업체 부품 링크 URL"
msgid "Supplier part description"
msgstr "공급업체 부품 설명"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "기본 비용"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "최소 요금(예: 보관 수수료)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "포장"
@@ -4307,7 +4450,7 @@ msgstr "포장 수량"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요."
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "배수"
@@ -4331,23 +4474,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:881 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 "표시 이름"
@@ -4503,7 +4646,7 @@ msgstr "원본 행 데이터"
msgid "Errors"
msgstr "오류"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "유효"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "알 수 없음"
@@ -4719,7 +4862,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 "그룹"
@@ -4743,117 +4886,118 @@ msgstr "최대 진행도"
msgid "Maximum value for progress type, required if type=progress"
msgstr "진행도 유형의 최대값( type=progress 인 경우 필수)"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "주문 참조"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "미결"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "프로젝트 코드 있음"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "생성자"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "이전 생성"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "이후 생성"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "시작일 있음"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "시작일 이전"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "시작일 이후"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "목표일 있음"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "목표일 이전"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "목표일 이후"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "이전 업데이트"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "이후 업데이트"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "가격 정보 있음"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "완료일 이전"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "완료일 이후"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "주문"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "주문 완료"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "내부 부품"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "주문 대기"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "완료됨"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "배송 있음"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr "배송을 찾을 수 없습니다"
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr "구매 주문"
msgid "Sales Order"
msgstr "판매 주문"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "반품 주문"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "총액"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "이 주문의 총액"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "주문 통화"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "이 주문의 통화(비워 두면 회사 기본값 사용)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "이 주문은 잠겨 있어 수정할 수 없습니다"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "담당자가 선택한 회사와 일치하지 않습니다"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "시작일은 목표일보다 이전이어야 합니다"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "주소가 선택한 회사와 일치하지 않습니다"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "주문 설명(선택 사항)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "이 주문의 프로젝트 코드를 선택하세요"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "외부 페이지 링크"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "시작일"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "이 주문의 예정 시작일"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "목표일"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "주문 배송 예상일입니다. 이 날짜 이후에는 주문이 기한 초과로 표시됩니다."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "발행일"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "주문이 발행된 날짜"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "업데이트 일시"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "이 주문을 담당하는 사용자 또는 그룹"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "이 주문의 연락 담당자"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "이 주문의 회사 주소"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "상태"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "구매 주문 상태"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "품목을 주문하는 공급업체"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "공급업체 참조"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "공급업체 주문 참조 코드"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "수령자"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "주문이 완료된 날짜"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "목적지"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "수령된 품목의 목적지"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "부품 공급업체는 구매 주문 공급업체와 일치해야 합니다"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "라인 항목이 구매 주문과 일치하지 않습니다"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "라인 항목에 연결된 부품이 없습니다"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "수량은 양수여야 합니다"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "고객"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "품목을 판매하는 대상 회사"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "판매 주문 상태"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "고객 참조"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "고객 주문 참조 코드"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "발송일"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "발송자"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "주문이 이미 완료되었습니다"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "주문이 이미 취소되었습니다"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "열린 주문만 완료로 표시할 수 있습니다"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "미완료 발송이 있어 주문을 완료할 수 없습니다"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "미완료 할당이 있어 주문을 완료할 수 없습니다"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "미완료 라인 항목이 있어 주문을 완료할 수 없습니다"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "이 주문은 잠겨 있어 수정할 수 없습니다"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "품목 수량"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr "라인 번호"
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr "이 항목의 라인 번호(선택)"
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "라인 항목 참조"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "라인 항목 메모"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "라인 항목 설명(선택)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "이 라인의 추가 정보"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "단가"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "구매 주문 라인 항목"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "공급업체 부품은 공급업체와 일치해야 합니다"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "빌드 주문은 외부로 표시되어야 합니다"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "빌드 주문은 조립 부품에만 연결할 수 있습니다"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "빌드 주문 부품은 라인 항목 부품과 일치해야 합니다"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "공급업체 부품"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "수령됨"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "수령된 품목 수"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "구매 가격"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "단위 구매 가격"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "이 라인 항목으로 이행할 외주 생산 작업 지시서"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "구매 주문 추가 라인"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "판매 주문 라인 항목"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "판매 가능한 부품만 판매 주문에 할당할 수 있습니다"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "판매 가격"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "단위 판매 가격"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "발송됨"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "발송 수량"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "판매 주문 발송"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "발송 주소는 고객과 일치해야 합니다"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "이 발송의 배송지 주소"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "발송 날짜"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "배송일"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "발송물 배송 날짜"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "확인자"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "발송"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "발송 번호"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "운송장 번호"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "발송 추적 정보"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "송장 번호"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "연결된 송장의 참조 번호"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "발송이 이미 전송되었습니다"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "발송에 할당된 재고 품목이 없습니다"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "발송은 완료하기 전에 확인되어야 합니다"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "판매 주문 추가 라인"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "판매 주문 할당"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "재고 품목이 할당되지 않았습니다"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "부품이 다른 라인에 재고 품목을 할당할 수 없습니다"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "부품이 없는 라인에는 재고를 할당할 수 없습니다"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "할당 수량은 재고 수량을 초과할 수 없습니다"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "할당 수량은 0보다 커야 합니다"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "판매 주문이 발송과 일치하지 않습니다"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "발송이 판매 주문과 일치하지 않습니다"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "라인"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "판매 주문 발송 참조"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "품목"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "할당할 재고 품목을 선택하세요"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "재고 할당 수량을 입력하세요"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "반품 주문 참조"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "품목이 반품되는 회사"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "반품 주문 상태"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "반품 주문 라인 항목"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "재고 품목을 지정해야 합니다"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "반품 수량이 재고 수량을 초과합니다"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "반품 수량은 0보다 커야 합니다"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "일련번호가 있는 재고 품목에 대한 수량이 올바르지 않습니다"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "고객에게서 반품받을 품목을 선택하세요"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "수령일"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "이 반품 품목을 수령한 날짜"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "결과"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "이 라인 항목의 결과"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "이 라인 항목의 반품 또는 수리에 관련된 비용"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "반품 주문 추가 라인"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "주문 ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "복제할 주문의 ID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "라인 복사"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "원본 주문에서 라인 항목을 복사"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "추가 라인 복사"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "원본 주문에서 추가 라인 항목을 복사"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "매개변수 복사"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr "원본 주문에서 주문 매개변수를 복사"
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "라인 항목"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "완료된 라인"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "주문 복제"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "이 주문을 복제하기 위한 옵션을 지정하세요"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "유효하지 않은 주문 ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "공급업체 이름"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "주문을 취소할 수 없습니다"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "주문에 미완료 라인 항목이 있습니다"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "주문이 열려 있지 않습니다"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "자동 가격 책정"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "구매 가격 통화"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "항목 병합"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "내부 부품 번호"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "내부 부품 이름"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "공급업체 부품을 지정해야 합니다"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "구매 주문을 지정해야 합니다"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "공급업체는 구매 주문과 일치해야 합니다"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "구매 주문은 공급업체와 일치해야 합니다"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "라인 항목"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "수령 품목의 목적지 위치를 선택하세요"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "입고 재고 품목의 배치 코드를 입력하세요"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "만료일"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "입고 재고 품목의 만료일을 입력하세요"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "입고 재고 품목의 일련번호를 입력하세요"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "입고 재고 품목의 포장 정보를 재정의"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "입고 재고 품목에 대한 추가 메모"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "바코드"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "스캔된 바코드"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "바코드가 이미 사용 중입니다"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "라인 항목을 제공해야 합니다"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "목적지 위치를 지정해야 합니다"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "제공된 바코드 값은 고유해야 합니다"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "발송"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "완료된 발송"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "할당된 라인"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "판매 가격 통화"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "할당된 품목"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "발송 세부 정보가 제공되지 않았습니다"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "수량은 양수여야 합니다"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "할당할 일련번호를 입력하세요"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "발송이 이미 발송되었습니다"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "발송이 이 주문과 연결되어 있지 않습니다"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "다음 일련번호는 사용할 수 없습니다"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "반품 주문 라인 항목"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "라인 항목이 반품 주문과 일치하지 않습니다"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "라인 항목이 이미 수령되었습니다"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "반품 수량"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "라인 가격 통화"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "분실"
@@ -5661,6 +5879,11 @@ msgstr "환불"
msgid "Reject"
msgstr "거부"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "지급됨"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "기한 초과 구매 주문"
@@ -5696,7 +5919,7 @@ msgstr "즐겨찾기"
msgid "Filter by starred categories"
msgstr "즐겨찾기 카테고리로 필터"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "깊이"
@@ -5704,7 +5927,7 @@ msgstr "깊이"
msgid "Filter by category depth"
msgstr "카테고리 깊이로 필터"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "최상위"
@@ -5712,7 +5935,7 @@ msgstr "최상위"
msgid "Filter by top-level categories"
msgstr "최상위 카테고리로 필터"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "계층 포함"
@@ -5732,75 +5955,79 @@ msgstr "상위 카테고리로 필터"
msgid "Exclude sub-categories under the specified category"
msgstr "지정된 카테고리 아래의 하위 카테고리를 제외"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "결과 있음"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "변형 여부"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "리비전 여부"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "리비전 있음"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM 유효"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "카테고리 계층 포함"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "조립 부품이 활성 상태"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "조립 부품을 추적할 수 있음"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "조립 부품을 테스트할 수 있음"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "구성 부품이 활성 상태"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "구성 부품을 추적할 수 있음"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "구성 부품을 테스트할 수 있음"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "구성 부품이 조립품임"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "구성 부품이 가상 부품임"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "사용 가능한 재고 있음"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "사용"
@@ -5809,11 +6036,11 @@ msgstr "사용"
msgid "Part Category"
msgstr "부품 카테고리"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "부품 카테고리"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "기본 위치"
@@ -5821,7 +6048,7 @@ msgstr "기본 위치"
msgid "Default location for parts in this category"
msgstr "이 카테고리의 부품 기본 위치"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "구조적"
@@ -5837,12 +6064,12 @@ msgstr "기본 키워드"
msgid "Default keywords for parts in this category"
msgstr "이 카테고리의 부품 기본 키워드"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "아이콘"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "아이콘(선택)"
@@ -5862,984 +6089,1028 @@ msgstr "기본값"
msgid "Default Parameter Value"
msgstr "기본 매개변수 값"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "판매 배수"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "가격 계산 캐시에 사용되는 통화"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "최소 BOM 비용"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "구성 부품의 최소 비용"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "최대 BOM 비용"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "구성 부품의 최대 비용"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "최소 구매 비용"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "과거 구매 비용의 최소값"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "최대 구매 비용"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "과거 구매 비용의 최대값"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "최소 내부 가격"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "내부 가격 구간에 기반한 최소 비용"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "최대 내부 가격"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "내부 가격 구간에 기반한 최대 비용"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "최소 공급업체 가격"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "외부 공급업체로부터의 최소 가격"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "최대 공급업체 가격"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "외부 공급업체로부터의 최대 가격"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "최소 변형 비용"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "변형 부품의 계산된 최소 비용"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "최대 변형 비용"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "변형 부품의 계산된 최대 비용"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "최소 비용"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "최소 비용 재정의"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "최대 비용"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "최대 비용 재정의"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "계산된 전체 최소 비용"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "계산된 전체 최대 비용"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "최소 판매 가격"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "가격 구간에 기반한 최소 판매 가격"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "최대 판매 가격"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "가격 구간에 기반한 최대 판매 가격"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "최소 판매 비용"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "과거 판매 가격의 최소값"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "최대 판매 비용"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "과거 판매 가격의 최대값"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "재고 조사 대상 부품"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "항목 수"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "재고 조사 시점의 개별 재고 항목 수"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "재고 조사 시점의 사용 가능한 총 재고"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "날짜"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "재고 조사가 수행된 날짜"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "최소 재고 비용"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "보유 재고의 추정 최소 비용"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "최대 재고 비용"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "보유 재고의 추정 최대 비용"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "부품 판매 가격 구간"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "부품 테스트 템플릿"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "테스트 이름"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "테스트 이름을 입력하세요"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "테스트 키"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "테스트를 위한 단순화된 키"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "테스트 설명"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "이 테스트에 대한 설명을 입력하세요"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "이 테스트가 활성화되어 있나요?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "필수"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "이 테스트는 통과가 필수인가요?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "값 필요"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "테스트 결과를 추가할 때 값이 필요한가요?"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "첨부 필요"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "이 테스트의 유효한 선택지(쉼표로 구분)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr "수량은 0 이상이어야 합니다"
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "상위 부품을 선택하세요"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "하위 부품"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "BOM에 사용할 부품을 선택하세요"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "이 BOM 항목의 BOM 수량"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "이 BOM 항목은 선택 사항입니다"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "설정 수량"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "손실률"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "제작 손실률 추정치(백분율, 0-100)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "반올림 배수"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "BOM 항목 참조"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOM 항목 메모"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "체크섬"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOM 라인 체크섬"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "검증됨"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "이 BOM 항목이 검증되었습니다"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "상속됨"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "추적 가능한 부품의 수량은 정수여야 합니다"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "하위 부품을 지정해야 합니다"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOM 항목 대체품"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "대체 부품은 기준 부품과 같을 수 없습니다"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "상위 BOM 항목"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "대체 부품"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "부품 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "부품 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "관련 부품 선택"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "이 관계에 대한 메모"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "중복된 관계가 이미 존재합니다"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "상위 카테고리"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "상위 부품 카테고리"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "하위 카테고리"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "결과"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "이 템플릿에 대해 기록된 결과 수"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "이 재고 항목의 구매 통화"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "파일이 이미지가 아닙니다"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "원본 부품"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "복제할 원본 부품을 선택하세요"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "이미지 복사"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "원본 부품의 이미지를 복사합니다"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "BOM 복사"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "원본 부품의 매개변수 데이터를 복사합니다"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "메모 복사"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "원본 부품의 메모를 복사합니다"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "테스트 복사"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "원본 부품의 테스트 템플릿을 복사합니다"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "초기 재고 수량"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "초기 재고 위치"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "이 부품의 초기 재고 위치를 지정하세요"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "공급업체를 선택하세요(또는 비워 두고 건너뛰기)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "제조사를 선택하세요(또는 비워 두고 건너뛰기)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "제조사 부품 번호"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "선택한 회사는 유효한 공급업체가 아닙니다"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "선택한 회사는 유효한 제조사가 아닙니다"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "이 MPN과 일치하는 제조사 부품이 이미 존재합니다"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "이 SKU와 일치하는 공급업체 부품이 이미 존재합니다"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "카테고리 이름"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "제작 중"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "현재 생산 중인 이 부품의 수량"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "제작 예정인 이 부품의 미완료 수량"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "재고 항목"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "개정"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "미할당 재고"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "변형 재고"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "부품 복제"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "다른 부품에서 초기 데이터를 복사합니다"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "초기 재고"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "초기 재고 수량과 함께 부품을 생성합니다"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "공급업체 정보"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "이 부품에 대한 초기 공급업체 정보를 추가합니다"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "카테고리 매개변수 복사"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "선택한 부품 카테고리의 매개변수 템플릿을 복사합니다"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "기존 이미지"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "기존 부품 이미지의 파일명"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "이미지 파일이 존재하지 않습니다"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "전체 자재 명세서(BOM) 검증"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "제작 가능"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "제작 주문에 필요"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "제작 주문에 할당됨"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "판매 주문에 필요"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "판매 주문에 할당됨"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "부품 IPN"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "부품 설명"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr "재고 조사 정보를 생성할 부품을 선택하세요(및 모든 변형 부품)."
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr "해당 카테고리(및 하위 카테고리)의 모든 부품을 포함할 카테고리를 선택하세요"
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr "해당 위치(하위 위치 포함)에 재고가 있는 모든 부품을 포함할 위치를 선택하세요"
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr "재고 조사 항목 생성"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr "선택한 부품에 대한 재고 조사 항목을 저장합니다"
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "보고서 생성"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr "선택한 부품에 대한 재고 조사 보고서를 생성합니다"
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "최소 가격"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "계산된 최소 가격 값을 재정의합니다"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "최소 가격 통화"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "최대 가격"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "계산된 최대 가격 값을 재정의합니다"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "최대 가격 통화"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "업데이트"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "이 부품의 가격 정보를 업데이트합니다"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "제공된 통화를 {default_currency}(으)로 변환할 수 없습니다"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "최소 가격은 최대 가격보다 클 수 없습니다"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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 이상이어야 합니다"
+msgid "Amount required for this item (can include units)"
+msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "상위 조립품을 선택하세요"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "구성 부품을 선택하세요"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "BOM을 복사할 부품을 선택하세요"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "기존 데이터 제거"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "복사하기 전에 기존 BOM 항목을 제거합니다"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "상속 항목 포함"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "템플릿 부품에서 상속된 BOM 항목 포함"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "잘못된 행 건너뛰기"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "이 옵션을 사용하면 잘못된 행을 건너뜁니다"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "대체 부품 복사"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "BOM 항목을 복제할 때 대체 부품도 복사"
@@ -7091,15 +7362,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 "인쇄할 항목이 제공되지 않았습니다"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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을 반환합니다"
@@ -7560,7 +7831,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 "가로"
@@ -7762,7 +8033,7 @@ msgstr "패키지 플러그인"
msgid "Plugin"
msgstr "플러그인"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "작성자를 찾을 수 없습니다"
@@ -8021,7 +8292,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 "템플릿에 유효한 항목이 제공되지 않았습니다"
@@ -8065,112 +8336,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 "자산 파일 설명"
@@ -8225,13 +8496,10 @@ msgstr "필요한 자재"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "부품 이미지"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "지급됨"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "필요 대상"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "시리얼 번호"
@@ -8292,7 +8560,7 @@ msgstr "재고 품목 테스트 보고서"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "설치된 항목"
@@ -8325,6 +8593,10 @@ msgstr "결과 없음(필수)"
msgid "No result"
msgstr "결과 없음"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr "잘못된 미디어 파일 경로"
@@ -8353,491 +8625,499 @@ msgstr "part_image 태그에는 Part 인스턴스가 필요합니다"
msgid "company_image tag requires a Company instance"
msgstr "company_image 태그에는 Company 인스턴스가 필요합니다"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "위치 깊이로 필터"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "최상위 위치로 필터"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "필터 결과에 하위 위치를 포함합니다"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "상위 위치"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "상위 위치로 필터"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "부품명(대소문자 구분 없음)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "부품명 포함(대소문자 구분 없음)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "부품명(정규식)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "부품 IPN(대소문자 구분 없음)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "부품 IPN 포함(대소문자 구분 없음)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "부품 IPN(정규식)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "최소 재고"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "최대 재고"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "상태 코드"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "외부 위치"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "작업 지시서에서 소비됨"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "다른 재고 품목에 설치됨"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "부품 트리"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "업데이트 날짜 이전"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "업데이트 날짜 이후"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "재고조사 날짜 이전"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "재고조사 날짜 이후"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "유효기간 날짜 이전"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "유효기간 날짜 이후"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "장기 재고"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "제외할 재고 품목 PK를 제공하면 해당 품목과 모든 하위 항목을 제외합니다"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "위치 계단식 적용"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "true이면 지정한 위치의 하위 위치에 있는 항목을 포함합니다"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "숫자 Location ID 또는 'null' 리터럴로 필터"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "수량이 필요합니다"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "유효한 부품을 제공해야 합니다"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "지정한 공급업체 부품이 존재하지 않습니다"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "공급업체 부품에 포장 단위가 정의되어 있지만 use_pack_size 플래그가 설정되지 않았습니다"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "추적 불가능한 부품에는 시리얼 번호를 제공할 수 없습니다"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "설치된 항목 포함"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "true이면 지정한 재고 품목 아래에 설치된 항목의 테스트 결과를 포함합니다"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "숫자 재고 품목 ID로 필터"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "ID가 {id}인 재고 품목이 존재하지 않습니다"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "부품 변형 포함"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "날짜 이후"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "날짜 이전"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "재고 위치 유형"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "재고 위치 유형"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "아이콘이 설정되지 않은 모든 위치에 대한 기본 아이콘(선택)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "재고 위치"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "재고 위치"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "소유자"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "소유자 선택"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "외부"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "외부 재고 위치입니다"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "위치 유형"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "이 위치의 재고 위치 유형"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field}이(가) 존재하지 않습니다"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "부품을 지정해야 합니다"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "재고 품목은 구조적 재고 위치에 배치할 수 없습니다!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "가상 부품에 대해 재고 품목을 생성할 수 없습니다"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "시리얼 번호가 있는 품목의 수량은 1이어야 합니다"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "수량이 1보다 크면 시리얼 번호를 설정할 수 없습니다"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "항목은 자기 자신에 속할 수 없습니다"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "is_building=True인 경우 항목에는 제조 참조가 있어야 합니다"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "제조 참조가 동일한 부품 객체를 가리키지 않습니다"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "상위 재고 품목"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "기본 부품"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "이 재고 품목에 맞는 공급업체 부품을 선택하세요"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "이 재고 품목은 어디에 있습니까?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "이 재고 품목이 보관된 포장재"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "설치 위치"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "이 항목이 다른 항목에 설치되어 있습니까?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "이 항목의 시리얼 번호"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "이 재고 품목의 배치 코드"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "재고 수량"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "원본 제조"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "이 재고 품목의 제조"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "소비한 대상"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "이 재고 품목을 소비한 제조 주문"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "원본 구매 주문"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "이 재고 품목의 구매 주문"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "대상 판매 주문"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "재고 품목의 유효기간입니다. 이 날짜 이후 재고는 만료로 간주됩니다"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "소진 시 삭제"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "재고가 소진되면 이 재고 품목을 삭제합니다"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "구매 시점의 단위 구매 가격"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "부품으로 변환됨"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "수량이 사용 가능한 재고를 초과합니다"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "부품이 추적으로 설정되어 있지 않습니다"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "수량은 정수여야 합니다"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "수량은 사용 가능한 재고 수량({self.quantity})을 초과할 수 없습니다"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "시리얼 번호는 목록으로 제공되어야 합니다"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "수량이 시리얼 번호와 일치하지 않습니다"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr "구조적 위치에 재고를 할당할 수 없습니다"
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "테스트 템플릿이 존재하지 않습니다"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "재고 품목이 판매 주문에 할당되었습니다"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "재고 품목이 다른 품목에 설치되어 있습니다"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "재고 품목에 다른 품목이 포함되어 있습니다"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "재고 품목이 고객에게 할당되었습니다"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "재고 품목이 현재 생산 중입니다"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "시리얼 추적 재고는 병합할 수 없습니다"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "중복 재고 품목"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "재고 품목은 동일한 부품을 참조해야 합니다"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "재고 항목은 동일한 공급업체 부품을 참조해야 합니다"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "재고 상태 코드는 일치해야 합니다"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "재고에 없으므로 재고 항목을 이동할 수 없습니다"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "재고 항목 추적"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "항목 메모"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "재고 항목 테스트 결과"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "이 테스트에는 값을 제공해야 합니다"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "이 테스트에는 첨부 파일을 업로드해야 합니다"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "이 테스트의 값이 올바르지 않습니다"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "테스트 결과"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "테스트 출력 값"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "테스트 결과 첨부 파일"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "테스트 메모"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "테스트 스테이션"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "테스트가 수행된 테스트 스테이션의 식별자"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "시작됨"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "테스트 시작 시각"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "완료됨"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "테스트 종료 시각"
@@ -8913,214 +9193,234 @@ msgstr "추가 시 포장 단위 사용: 입력한 수량은 포장 개수입니
msgid "Use pack size"
msgstr "포장 단위 사용"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "새 항목의 일련 번호를 입력하세요"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "공급업체 부품 번호"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "만료됨"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "하위 항목"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "추적 항목"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "이 재고 항목의 구매 가격(단위 또는 포장 기준)"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "일련 번호를 부여할 재고 항목 수를 입력하세요"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "재고 항목이 제공되지 않았습니다"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "수량은 사용 가능한 재고 수량({q})을(를) 초과할 수 없습니다"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "대상 재고 위치"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "이 부품에는 일련 번호를 할당할 수 없습니다"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "일련 번호가 이미 존재합니다"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "설치할 재고 항목을 선택하세요"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "설치 수량"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "설치할 항목 수량을 입력하세요"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "거래 메모 추가(선택 사항)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "설치 수량은 최소 1이어야 합니다"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "재고 항목을 사용할 수 없습니다"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "선택한 부품이 BOM(자재 명세서)에 없습니다"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "설치 수량은 사용 가능한 수량을 초과할 수 없습니다"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "미설치 항목의 대상 위치"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "재고 항목을 변환할 부품을 선택하세요"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "선택한 부품은 변환에 사용할 수 없는 옵션입니다"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "공급업체 부품이 할당된 재고 항목은 변환할 수 없습니다"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "재고 항목 상태 코드"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "상태를 변경할 재고 항목을 선택하세요"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "선택된 재고 항목이 없습니다"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "하위 위치"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "상위 재고 위치"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "부품은 판매 가능해야 합니다"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "항목이 판매 주문에 할당되어 있습니다"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "항목이 제조 주문에 할당되어 있습니다"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "재고 항목을 할당할 고객"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "선택한 회사는 고객이 아닙니다"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "재고 할당 메모"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "재고 항목 목록을 제공해야 합니다"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "재고 병합 메모"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "공급업체 불일치 허용"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "공급업체 부품이 다른 재고 항목의 병합을 허용합니다"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "상태 불일치 허용"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "상태 코드가 다른 재고 항목의 병합을 허용합니다"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "최소 두 개의 재고 항목을 제공해야 합니다"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "변경 없음"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "재고 항목 기본 키 값"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "재고 항목이 재고에 없습니다"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "재고 항목이 이미 재고에 있습니다"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "수량은 음수일 수 없습니다"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "재고 거래 메모"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "기존 재고로 병합"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "가능하면 반품된 항목을 기존 재고 항목에 병합합니다"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "다음 일련 번호"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "이전 일련 번호"
@@ -9458,150 +9758,158 @@ 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 "사용자의 기본 그룹"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "관리자"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "구매 주문"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "판매 주문"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "반품 주문"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "사용자 이름"
diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po
index 1748d98d6d..4287066145 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Lithuanian\n"
"Language: lt_LT\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
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
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Pateiktas neteisingas kiekis"
@@ -104,13 +105,13 @@ msgstr "Įveskite datą"
msgid "Invalid decimal value"
msgstr "Neteisinga dešimtainė reikšmė"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Pastabos"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Aprašymas"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Aprašymas (neprivalomas)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valiuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Užsakymo būsena"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Pirminė gamyba"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Įtraukti variantus"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Įtraukti variantus"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Įtraukti variantus"
msgid "Part"
msgstr "Detalė"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategorija"
@@ -605,7 +593,7 @@ msgstr "Kategorija"
msgid "Ancestor Build"
msgstr "Ankstesnė gamyba"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Priskirta man"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Minimali data"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Maksimali data"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Neįtraukti medžio struktūros"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Sunaudojama"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Pasirinktinai"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Surinkimas"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Sekama"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testuojama"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Liko neįvykdytų užsakymų"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Priskirta"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Užsakyta"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Gamybos užsakymas"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Vieta"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Gamybos užsakymai"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Surinkimo BOM nėra patvirtintas"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Negalima sukurti gamybos užsakymo neaktyviai detalei"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Negalima sukurti gamybos užsakymo atrakintai detalei"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Turi būti nurodytas atsakingas vartotojas arba grupė"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Gamybos užsakymo detalės keisti negalima"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Tikslinė data turi būti po pradžios datos"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Gamybos užsakymo nuoroda"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Nuoroda"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Trumpas gamybos aprašymas (neprivalomas)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Pasirinkite detalę gamybai"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Pardavimo užsakymo nuoroda"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Šaltinio vieta"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Pasirinkite vietą atsargoms paimti šiai gamybai (palikite tuščią, jei tinka bet kuri vieta)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Paskirties vieta"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Pasirinkite vietą, kur bus laikomos užbaigtos prekės"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Gamybos kiekis"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Atsargų kiekis, kurias reikia pagaminti"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Užbaigtos prekės"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Užbaigtų atsargų elementų skaičius"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Gamybos būsena"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Gamybos būsenos kodas"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Partijos kodas"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Sukūrimo data"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Gamybos pradžios data"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Planuojama šio gamybos užsakymo pradžios data"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Tikslinė užbaigimo data"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Užbaigimo data"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "Užbaigė"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Išdavė"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Atsakingas"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Išorinė nuoroda"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Nuoroda į išorinį URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Gamybos prioritetas"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Šio gamybos užsakymo prioritetas"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Projekto kodas"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Šio gamybos užsakymo projekto kodas"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Nepavyko perduoti užduoties, kad būtų atlikti gamybos paskirstymai"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Gamybos užsakymas {build} užbaigtas"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Gamybos užsakymas užbaigtas"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Sekamoms detalėms būtina nurodyti serijos numerius"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nepateiktas gamybos rezultatas"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Gamybos rezultatas jau užbaigtas"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Gamybos rezultatas neatitinka gamybos užsakymo"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Kiekis turi būti didesnis nei nulis"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "Kiekis negali viršyti rezultato kiekio"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Gamybos užsakymo eilutės įrašas"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Gamybos objektas"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Gamybos objektas"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Kiekis"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Reikalingas kiekis gamybos užsakymui"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Atsargoms su serijos numeriais kiekis turi būti 1"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Atsargų elementas per daug paskirstytas"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Atsargų elementas"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Šaltinio atsargų elementas"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Įdiegti į"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Paskirties atsargų elementas"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Gamybos lygis"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Detalės pavadinimas"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Gamybos rezultatas"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Gamybos rezultatas neatitinka pirminės gamybos"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Šis gamybos rezultatas jau užbaigtas"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Įveskite kiekį gamybos rezultatui"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Sekamoms detalėms reikalingas sveikasis kiekis"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serijos numeriai"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Įveskite serijos numerius gamybos rezultatams"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Atsargų vieta gamybos rezultatams"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automatiškai priskirti serijos numerius"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Turi būti pateiktas gamybos rezultatų sąrašas"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Atsargų vieta brokuotiems rezultatams"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Atmesti priskyrimus"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Priimti nepilną priskyrimą"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Užbaigti rezultatus, net jei atsargos dar nėra pilnai priskirtos"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Sunaudoti priskirtas atsargas"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Pašalinti nebaigtus rezultatus"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Ištrinti visus nebaigtus gamybos rezultatus"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Neleidžiama"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Per daug paskirstytos atsargos"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Kaip norite elgtis su papildomai šiam gamybos užsakymui priskirtomis atsargomis"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Kai kurios atsargos paskirstytos per daug"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Priimti nepriskirtą"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakymui"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Reikalingos atsargos nėra visiškai priskirtos"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Priimti nepilną"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Priimti, kad ne visi reikalingi gamybos rezultatai buvo užbaigti"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Gamybos užsakymas turi būti gamybos būsenoje"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Gamybos užsakymas turi nebaigtų rezultatų"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Gamybos eilutė"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Gamybos rezultatas"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Gamybos eilutės įrašas"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Prekė turi būti atsargose"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Viršytas prieinamas kiekis ({q})"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Turi būti pateikti paskirstymo elementai"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Atsargų vieta, iš kurios bus imamos detalės (palikite tuščią, jei tinka bet kuri vieta)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Neįtraukti vietos"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Neįtraukti atsargų iš šios pasirinktos vietos"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Keičiamos atsargos"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Pakaitinės atsargos"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Leisti priskirti pakaitines detales"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Pasirenkami elementai"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Priskirti papildomus BOM elementus gamybos užsakymui"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOM nuoroda"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOM detalės ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "BOM detalės pavadinimas"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Gamyba"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Tiekėjo detalė"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Priskirtas kiekis"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Gamybos nuoroda"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Detalės kategorijos pavadinimas"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Sekama"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Paveldėta"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Leisti variantus"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "BOM elementas"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Gamyboje"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Išorinės atsargos"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Prieinamos atsargos"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Prieinamos pakaitinės atsargos"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Prieinamos variantų atsargos"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Laukiama"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Gamyba"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Sulaikyta"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Atšaukta"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Užbaigta"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Gamybos užsakymas {build} užbaigtas"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Gamybos užsakymas užbaigtas"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Atsargos, reikalingos gamybos užsakymui"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Vėluojantis gamybos užsakymas"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Gamybos užsakymas {bo} dabar vėluoja"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Yra nuoroda"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Yra failas"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "Vartotojas neturi teisės ištrinti šių priedų"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Vartotojas neturi teisės ištrinti šio priedo"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Atnaujinta"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Paskutinio atnaujinimo laiko žymė"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unikalus projekto kodas"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projekto aprašymas"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Nustatymo raktas"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Nustatymo reikšmė"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Pasirinkta reikšmė yra netinkama"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Reikšmė turi būti loginė (taip/ne)"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Reikšmė turi būti sveikasis skaičius"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Reikšmė turi būti tinkamas skaičius"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Reikšmė neatitinka patikros taisyklių"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Kaina"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Vieneto kaina nurodytam kiekiui"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Galutinis taškas"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Ar šis webhook'as aktyvus"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Raktas"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Prieigos raktas"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Slaptas raktas"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Bendras slaptas HMAC raktas"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Pranešimo ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Unikalus pranešimo identifikatorius"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Pagrindinis serveris"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Serveris, iš kurio gautas pranešimas"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Antraštė"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Šio pranešimo antraštė"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Turinys"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Šio pranešimo turinys"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Galutinis taškas, kuriame gautas pranešimas"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Apdorota"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Ar darbas su šiuo pranešimu baigtas?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "ID"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Pavadinimas"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Nuoroda"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Paskelbta"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autorius"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Santrauka"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Perskaityta"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Ar ši naujiena buvo perskaityta?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Paveikslėlio failas"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Modelio tipas, kuriam priskiriamas šis paveikslėlis"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "Modelio ID, kuriam priskiriamas šis paveikslėlis"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Pasirinktinis vienetas"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Vieneto simbolis turi būti unikalus"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Vieneto pavadinimas turi būti tinkamas identifikatorius"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Vieneto pavadinimas"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Simbolis"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Nebūtinas vieneto simbolis"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Apibrėžimas"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Vieneto apibrėžimas"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Priedas"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Trūksta failo"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Trūksta išorinės nuorodos"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Modelio tipas"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Modelio tipas, kuriam skirtas paveikslėlis"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Pasirinkite failą priedui"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentaras"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Komentaras prie priedo"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Įkėlimo data"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Failo įkėlimo data"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Failo dydis"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Failo dydis baitais"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Netinkamas modelio tipas priedui"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Pasirinktinė būsena"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Pasirinktinės būsenos"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Nuorodos būsenų rinkinys"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Loginis raktas"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Reikšmė"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiketė"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Spalva"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Spalva, rodoma vartotojo sąsajoje"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modelis"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Modelis, su kuriuo susieta būsena"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Turi būti pasirinktas modelis"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Turi būti pasirinktas raktas"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Turi būti pasirinktas loginis raktas"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "Raktas turi skirtis nuo loginio rakto"
-#: common/models.py:2186
+#: common/models.py:2362
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:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Pasirinkimų sąrašas"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Pasirinkimų sąrašai"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Pasirinkimų sąrašo pavadinimas"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Pasirinkimų sąrašo aprašymas"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Užrakinta"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Ar šis sąrašas užrakintas?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Ar šį pasirinkimų sąrašą galima naudoti?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Šaltinio papildinys"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Papildinys, pateikiantis šį pasirinkimų sąrašą"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Šaltinio eilutė"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Numatytasis įrašas"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Sukurta"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Paskutinį kartą atnaujinta"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Pasirinkimų sąrašo įrašas"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Pasirinkimų sąrašo įrašai"
-#: common/models.py:2382
+#: common/models.py:2558
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:2564
msgid "Value of the selection list entry"
msgstr "Pasirinkimų sąrašo įrašo reikšmė"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Pasirinkimų įrašo etiketė"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Pasirinkimų įrašo aprašymas"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Ar šis sąrašo įrašas aktyvus?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parametro šablonas"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Pasirinkimai turi būti unikalūs"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Parametro šablono pavadinimas turi būti unikalus"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Parametro pavadinimas"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Vienetai"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Fiziniai šio parametro vienetai"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Parametro aprašymas"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Žymimasis laukelis"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Ar šis parametras yra žymimasis laukelis?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Pasirinkimai"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Pasirinkimų sąrašas šiam parametrui"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Įjungta"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Neteisingas pasirinkimas parametro reikšmei"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Data"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Pastaba"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Neprivalomas pastabų laukas"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Brūkšninio kodo nuskaitymas"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Brūkšninio kodo duomenys"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Laiko žymė"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Brūkšninio kodo nuskaitymo data ir laikas"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontekstas"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Atsakas"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Rezultatas"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Gautos prekės"
@@ -2451,25 +2491,25 @@ msgstr "Rakto argumentai"
msgid "Task keyword arguments"
msgstr "Užduoties rakto argumentai"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Modelio tipas"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Pasirinkimų sąrašas yra užrakintas"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dienos"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
msgid "Require schema specification when validating URLs"
msgstr "Reikalauti schemos nurodymo tikrinant URL"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "Atnaujinimų tikrinimo intervalas"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatinė atsarginė kopija"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automatinio atsarginės kopijos kūrimo intervalas"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Užduočių ištrynimo intervalas"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Klaidų žurnalo ištrynimo intervalas"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Pranešimų ištrynimo intervalas"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Brūkšninių kodų palaikymas"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Išsaugoti brūkšninių kodų nuskaitymus"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Maksimalus nuskaitymų skaičius"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Brūkšninio kodo įvesties delsimas"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Brūkšninio kodo įvesties apdorojimo delsos laikas"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Brūkšninių kodų palaikymas per kamerą"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Rodyti brūkšninio kodo duomenis"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Brūkšninio kodo generavimo papildinys"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Detalių versijos"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Įjungti versijos lauką detalėms"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Tik surinkimo versijoms"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Leisti versijas tik surenkamoms detalėms"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Leisti pašalinti iš surinkimo"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "IPN reguliarioji išraiška"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Leisti pasikartojančius IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Leisti redaguoti IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Kopijuoti detalės BOM duomenis"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Kopijuoti detalės parametrus"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Kopijuoti detalės testavimo duomenis"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kopijuoti kategorijų parametrų šablonus"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Detalės pagal nutylėjimą yra šablonai"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponentas"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Galima įsigyti"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Parduodama"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuali"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Detalės pagal nutylėjimą yra virtualios"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Rodyti susijusias detales"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Rodyti susijusias detales pasirinktai detalei"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Pradiniai atsargų duomenys"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Pradiniai tiekėjo duomenys"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Detalės pavadinimo rodymo formatas"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Detalės pavadinimo rodymo formatas"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Detalės kategorijos numatytoji piktograma"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Mažiausias kainos dešimtainių skaičių kiekis"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Didžiausias kainos dešimtainių skaičių kiekis"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Naudoti tiekėjo kainas"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Pirkimų istorija keičia kainas"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Naudoti atsargų kainas"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Atsargų kainų galiojimo trukmė"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Naudoti variantų kainas"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Tik aktyvūs variantai"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Kainodaros atnaujinimo intervalas"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Vidinės kainos"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Įjungti vidines kainas detalėms"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Vidinės kainos viršenybė"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Įjungti etikečių spausdinimą"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Etiketės vaizdo DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Įjungti ataskaitas"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Įjungti ataskaitų generavimą"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Derinimo režimas"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Registruoti ataskaitų klaidas"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Numatytasis PDF ataskaitų puslapio dydis"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Reikalauti parametrų vienetų"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globaliai unikalūs serijiniai numeriai"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Ištrinti išnaudotas atsargas"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "Nustato numatytą elgseną, kai atsargos yra išnaudotos"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Partijos kodo šablonas"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Atsargų galiojimas"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Įjungti atsargų galiojimo funkcionalumą"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Parduoti pasibaigusias galioti atsargas"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Leisti parduoti pasibaigusias galioti atsargas"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Atsargų senėjimo laikas"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Naudoti pasibaigusias galioti atsargas gamyboje"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Leisti naudoti pasibaigusias galioti atsargas gamyboje"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Atsargų nuosavybės kontrolė"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Atsargų vietos numatytoji piktograma"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Rodyti sumontuotas atsargas"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Rodyti sumontuotas atsargas atsargų lentelėse"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "Tikrinti BOM montuojant atsargas"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Leisti perkelti neturimas atsargas"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Gamybos užsakymo nuorodos šablonas"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Reikalauti aktyvios detalės"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Reikalauti užrakintos detalės"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Reikalauti galiojančio komplektavimo sąrašo (BOM)"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Reikalauti uždarytų antrinių užsakymų"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blokuoti, kol testai bus išlaikyti"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Neleidžia užbaigti gaminių, kol visi privalomi testai nėra išlaikyti"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Įjungti grąžinimo užsakymus"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Įjungia grąžinimo užsakymų funkciją vartotojo sąsajoje"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Grąžinimo užsakymo nuorodos šablonas"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Būtinas šablonas grąžinimo užsakymo nuorodos laukui generuoti"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Redaguoti užbaigtus grąžinimo užsakymus"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Leisti redaguoti grąžinimo užsakymus po jų užbaigimo"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Pardavimo užsakymo nuorodos šablonas"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Būtinas šablonas pardavimo užsakymo nuorodos laukui generuoti"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Numatytasis siuntinys pardavimo užsakymui"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Leisti automatiškai sukurti siuntinį kartu su pardavimo užsakymu"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Redaguoti užbaigtus pardavimo užsakymus"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Leisti redaguoti pardavimo užsakymus po jų išsiuntimo arba užbaigimo"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Pažymėti išsiųstus užsakymus kaip užbaigtus"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Pardavimo užsakymai, pažymėti kaip išsiųsti, bus automatiškai užbaigti, praleidžiant būseną „išsiųsta“"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Pirkimo užsakymo nuorodos šablonas"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Redaguoti užbaigtus pirkimo užsakymus"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Konvertuoti valiutą"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Automatiškai užbaigti pirkimo užsakymus"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Įjungti pamiršto slaptažodžio funkciją"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Įjungti registraciją"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Įjungti vieningą prisijungimą (SSO)"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Įjungti vieningą prisijungimą (SSO) prisijungimo puslapyje"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Įjungti registraciją per SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Įjungti SSO grupių sinchronizavimą"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "SSO grupės raktas"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "SSO grupių susiejimas"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Pašalinti grupes, nepriklausančias SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "El. paštas privalomas"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Automatiškai užpildyti SSO naudotojų duomenis"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Įvesti el. paštą du kartus"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Įvesti slaptažodį du kartus"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Leidžiami domenai"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupė registruojantis"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Reikalauti kelių veiksnių autentifikacijos (MFA)"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Vartotojai privalo naudoti kelių veiksnių apsaugą."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Tikrinti įskiepius paleidimo metu"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Tikrinti įskiepių atnaujinimus"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Įjungti URL integravimą"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Leisti įskiepiams pridėti URL maršrutus"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Įjungti navigacijos integraciją"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Leisti įskiepiams integruotis į navigaciją"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Įjungti programų integraciją"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Leisti įskiepiams pridėti programas"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Įjungti planavimo integraciją"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Leisti įskiepiams vykdyti suplanuotas užduotis"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Įjungti įvykių integraciją"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "Leisti įskiepiams reaguoti į vidinius įvykius"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "Įjungti sąsajos integraciją"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "Įjungti projektų kodus"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "Įjungti projektų kodų naudojimą projektų sekimui"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Neįtraukti išorinių vietų"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Automatinės inventorizacijos periodas"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Rodyti pilnus vartotojų vardus"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "Rodyti pilnus vardus vietoj vartotojo vardų"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "Rodyti vartotojų profilius"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "Rodyti vartotojų profilius jų paskyros puslapyje"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Įjungti bandymų stoties duomenis"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Gauti klaidų ataskaitas"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Gauti pranešimus apie sistemos klaidas"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Paskutiniai naudoti spausdintuvai"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Išsaugoti paskutinius naudotojo naudotus spausdintuvus"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Nepateiktas priedų modelio tipas"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Neteisingas priedų modelio tipas"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Mažiausias vietų skaičius negali būti didesnis nei didžiausias"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Didžiausias vietų skaičius negali būti mažesnis nei mažiausias"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Tuščias domenas neleidžiamas."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Neteisingas domeno pavadinimas: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Reikšmė turi būti didžiosiomis raidėmis"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Reikšmė turi būti galiojantis kintamojo identifikatorius"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Gamintojas"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Įmonė"
@@ -4050,8 +4193,8 @@ msgstr "Kontaininis telefono numeris"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontaktinis asmuo"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adresas"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Pagrindinė detalė"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Gamintojo detalės numeris (MPN)"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Tiekėjas"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Tiekėjo sandėlio numeris (SKU)"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "bazinė kaina"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Pakuotė"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "daugiklis"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Galiojantis"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Nežinoma"
@@ -4719,7 +4862,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ė"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Užsakymo nuoroda"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Neįvykdyta"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Turi projekto kodą"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Sukūrė"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Sukurta prieš"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Sukurta po"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Turi pradžios datą"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Pradžios data prieš"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Pradžios data po"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Turi tikslinę datą"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Tikslinė data prieš"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Tikslinė data po"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Turi kainodarą"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Užbaigta prieš"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Užbaigta po"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Užsakymas"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Užsakymas įvykdytas"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Vidinė detalė"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Užsakymas laukia vykdymo"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Užbaigta"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Turi siuntą"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Grąžinimo užsakymas"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Bendra kaina"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Bendra kaina už šį užsakymą"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Užsakymo valiuta"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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ą)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Šis užsakymas užrakintas ir negali būti keičiamas"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Kontaktas nesutampa su pasirinkta įmone"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Pradžios data turi būti prieš tikslinę datą"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Užsakymo aprašymas (neprivalomas)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Nuoroda į išorinį puslapį"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Pradžios data"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Tikslinė data"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Tikėtina užsakymo pristatymo data. Užsakymas bus vėluojantis po šios datos."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Išdavimo data"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Data, kada užsakymas buvo išduotas"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Vartotojas arba grupė, atsakinga už šį užsakymą"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Kontaktinis asmuo šiam užsakymui"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Įmonės adresas šiam užsakymui"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Būsena"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Pirkimo užsakymo būsena"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Įmonė, iš kurios užsakomos prekės"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Tiekėjo nuoroda"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Tiekėjo užsakymo nuorodos kodas"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "gavo"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Data, kada užsakymas buvo užbaigtas"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Paskirties vieta"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Paskirties vieta gautoms prekėms"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Detalių tiekėjas turi atitikti pirkimo užsakymo tiekėją"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Eilutės įrašas neatitinka pirkimo užsakymo"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Kiekis turi būti teigiamas skaičius"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Įmonė, kuriai prekės parduodamos"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Pardavimo užsakymo būsena"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Kliento nuoroda"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Kliento užsakymo nuorodos kodas"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Siuntos data"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "išsiuntė"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Užsakymas jau baigtas"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Užsakymas jau atšauktas"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Prekės kiekis"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Eilutės įrašo nuoroda"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Eilutės įrašo pastabos"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Eilutės įrašo aprašymas (neprivalomas)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Papildomas kontekstas šiai eilutei"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Vieneto kaina"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Pirkimo užsakymo eilutės įrašas"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Tiekėjo detalė turi atitikti tiekėją"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Tiekėjo detalė"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Gauta"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Gautų prekių kiekis"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Pirkimo kaina"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Vieneto pirkimo kaina"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "Pirkimo užsakymo papildoma eilutė"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Pardavimo užsakymo eilutės įrašas"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Pardavimo kaina"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Vieneto pardavimo kaina"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Išsiųsta"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Išsiųstas kiekis"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Pardavimo užsakymo siunta"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Siuntos data"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Pristatymo data"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Siuntos pristatymo data"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Patikrino"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Siunta"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Siuntos numeris"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Sekimo numeris"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Siuntos sekimo informacija"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Sąskaitos faktūros numeris"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Nuorodos numeris susijusiai sąskaitai faktūrai"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Siunta jau buvo išsiųsta"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Siunta neturi priskirtų prekių"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "Pardavimo užsakymo papildoma eilutė"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Pardavimo užsakymo paskirstymas"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Prekė nėra priskirta"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Eilutė"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Pardavimo užsakymo siuntos nuoroda"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Prekė"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Pasirinkite atsargų elementą priskyrimui"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Įveskite prekių priskyrimo kiekį"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Grąžinimo užsakymo nuoroda"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Įmonė, iš kurios grąžinamos prekės"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Grąžinimo užsakymo būsena"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Grąžinimo užsakymo eilutės įrašas"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Turi būti nurodytas atsargų elementas"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Grąžinamo kiekis viršija prekių kiekį"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Neteisingas kiekis serijinio numerio prekei"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Pasirinkite prekę grąžinimui iš kliento"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Gavimo data"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Rezultatas"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Rezultatas šiam eilutės įrašui"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Grąžinimo užsakymo papildoma eilutė"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Užsakymo ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "Užsakymo, kurį reikia dubliuoti, ID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Kopijuoti eilutes"
-#: order/serializers.py:82
+#: order/serializers.py:84
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:90
msgid "Copy Extra Lines"
msgstr "Kopijuoti papildomas eilutes"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopijuoti parametrus"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Eilutės įrašai"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Užbaigtos eilutės"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Dubliuoti užsakymą"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Nurodykite užsakymo dubliavimo parinktis"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Neteisingas užsakymo ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Tiekėjo pavadinimas"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Užsakymo atšaukti negalima"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Užsakyme yra neužbaigtų eilutės įrašų"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Užsakymas nėra atidarytas"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automatinis kainų nustatymas"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Pirkimo kainos valiuta"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Sujungti elementus"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Vidinis detalės numeris"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Vidinis detalės pavadinimas"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Turi būti nurodyta tiekėjo detalė"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Turi būti nurodytas pirkimo užsakymas"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Tiekėjas turi atitikti pirkimo užsakymą"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Eilutės įrašas"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Pasirinkite paskirties vietą gautiems elementams"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Galiojimo data"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "Įveskite galiojimo datą gaunamoms atsargoms"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Įveskite gaunamų atsargų serijos numerius"
-#: order/serializers.py:888
+#: order/serializers.py:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Papildoma pastaba gaunamoms atsargoms"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Brūkšninis kodas"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Nuskaitytas brūkšninis kodas"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Brūkšninis kodas jau naudojamas"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Turi būti pateikti eilutės įrašai"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Turi būti nurodyta paskirties vieta"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr "Siuntos"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Užbaigtos siuntos"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Pardavimo kainos valiuta"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Paskirstyti elementai"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Nepateikta siuntos informacija"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Kiekis turi būti teigiamas"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Įveskite priskiriamus serijos numerius"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Siunta jau išsiųsta"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Siunta nėra susieta su šiuo užsakymu"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Nerasta atitikmenų šiems serijos numeriams"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Šie serijos numeriai nepasiekiami"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Grąžinimo užsakymo eilutės įrašas"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "Eilutės įrašas jau gautas"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Grąžinamas kiekis"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Eilutės kainos valiuta"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Prarasta"
@@ -5661,6 +5879,11 @@ msgstr "Pinigų grąžinimas"
msgid "Reject"
msgstr "Atmesti"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Išduota"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Vėluojantis pirkimo užsakymas"
@@ -5696,7 +5919,7 @@ msgstr "Pažymėta žvaigždute"
msgid "Filter by starred categories"
msgstr "Filtruoti pagal pažymėtas kategorijas"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Gylis"
@@ -5704,7 +5927,7 @@ msgstr "Gylis"
msgid "Filter by category depth"
msgstr "Filtruoti pagal kategorijos gylį"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Aukščiausio lygio"
@@ -5712,7 +5935,7 @@ msgstr "Aukščiausio lygio"
msgid "Filter by top-level categories"
msgstr "Filtruoti pagal aukščiausio lygio kategorijas"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Kaskada"
@@ -5732,75 +5955,79 @@ msgstr "Filtruoti pagal pirminę kategoriją"
msgid "Exclude sub-categories under the specified category"
msgstr "Neįtraukti sub-kategorijų po nurodyta kategorija"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Turi rezultatų"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Yra variantas"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Yra versija"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Turi versijų"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM galiojantis"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Surinkimo detalė gali būti testuojama"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Komponento detalė gali būti testuojama"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Naudoja"
@@ -5809,11 +6036,11 @@ msgstr "Naudoja"
msgid "Part Category"
msgstr "Detalių kategorija"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Numatytoji vieta"
msgid "Default location for parts in this category"
msgstr "Numatytoji vieta detalėms šioje kategorijoje"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Struktūrinė"
@@ -5837,12 +6064,12 @@ msgstr "Numatytieji raktažodžiai"
msgid "Default keywords for parts in this category"
msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Piktograma"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Piktograma (neprivaloma)"
@@ -5862,984 +6089,1028 @@ msgstr "Numatytoji reikšmė"
msgid "Default Parameter Value"
msgstr "Numatytoji parametro reikšmė"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Parduodamas kiekis"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Valiuta, naudojama kainų skaičiavimams kaupti"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimali BOM kaina"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minimali komponentų detalių kaina"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maksimali BOM kaina"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maksimali komponentų detalių kaina"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimali pirkimo kaina"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Mažiausia istorinė pirkimo kaina"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maksimali pirkimo kaina"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Didžiausia istorinė pirkimo kaina"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimali vidinė kaina"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Mažiausia kaina pagal vidinius kainų intervalus"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maksimali vidinė kaina"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Didžiausia kaina pagal vidinius kainų intervalus"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Mažiausia tiekėjo kaina"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Mažiausia detalės kaina iš išorinių tiekėjų"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Didžiausia tiekėjo kaina"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Didžiausia detalės kaina iš išorinių tiekėjų"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Mažiausia varianto kaina"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Apskaičiuota minimali variantų detalių kaina"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Didžiausia varianto kaina"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Apskaičiuota didžiausia variantų detalių kaina"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimali kaina"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Nepaisyti minimalios kainos"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maksimali kaina"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Nepaisyti maksimalios kainos"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Apskaičiuota bendra minimali kaina"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Apskaičiuota bendra maksimali kaina"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimali pardavimo kaina"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Mažiausia pardavimo kaina pagal kainų intervalus"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Didžiausia pardavimo kaina"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Didžiausia pardavimo kaina pagal kainų intervalus"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Mažiausia pardavimo kaina"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Mažiausia istorinė pardavimo kaina"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Didžiausia pardavimo kaina"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Didžiausia istorinė pardavimo kaina"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Detalė inventorizacijai"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Vienetų skaičius"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Atsargų įrašų skaičius inventorizacijos metu"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Data"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Inventorizacijos atlikimo data"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimali atsargų kaina"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Apytikslė minimali turimų atsargų kaina"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maksimali atsargų kaina"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Apytikslė maksimali turimų atsargų kaina"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Detalės kainų intervalai pardavimui"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Detalės bandymų šablonas"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms"
-#: part/models.py:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Bandymo pavadinimas"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Įveskite bandymo pavadinimą"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Bandymo raktas"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Supaprastintas bandymo raktas"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Bandymo aprašymas"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Įveskite šio bandymo aprašymą"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Ar šis bandymas įjungtas?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Privalomas"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Ar šį bandymą būtina išlaikyti?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Reikalauja reikšmės"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Reikalauja priedo"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "BOM elemento keisti negalima - surinkimas užrakintas"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Pasirinkite pirminę detalę"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Pavaldi detalė"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Pasirinkite detalę, naudojamą BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "BOM reikalingas šios detalės kiekis"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Šis BOM elementas yra pasirenkamas"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "BOM nuoroda"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOM pastabos"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Kontrolinė suma"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOM eilutės kontrolinė suma"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Patvirtinta"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Šis BOM elementas patvirtintas"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Paveldima"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Šį BOM elementą paveldi variantų sąrašai"
-#: part/models.py:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Turi būti nurodyta pavaldi detalė"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOM elemento pakaitalas"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Pagrindinis BOM elementas"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Pakaitinė detalė"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Detalė 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Detalė 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Pasirinkite susijusią detalę"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Pastaba šiam ryšiui"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Toks ryšys jau egzistuoja"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Pagrindinė kategorija"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Pagrindinė detalių kategorija"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Subkategorijos"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Rezultatai"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Šio atsargų elemento pirkimo valiuta"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Failas nėra paveikslėlis"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Pradinė detalė"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Pasirinkite pradinę detalę kopijavimui"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopijuoti paveikslėlį"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Kopijuoti paveikslėlį iš pradinės detalės"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Kopijuoti BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
msgid "Copy parameter data from original part"
msgstr "Kopijuoti parametrų duomenis iš pradinės detalės"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Kopijuoti pastabas"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Kopijuoti pastabas iš pradinės detalės"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Pradinis atsargų kiekis"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Pradinė atsargų vieta"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Nurodykite pradinę atsargų vietą šiai detalei"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Gamintojo detalės numeris"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Pasirinkta įmonė nėra galiojantis gamintojas"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Kategorijos pavadinimas"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Surinkimas"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Atsargos"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Versijos"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Nepriskirtos atsargos"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Variantų atsargos"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Kopijuoti detalę"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Kopijuoti pradinius duomenis iš kitos detalės"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Pradinės atsargos"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Sukurti detalę su pradiniu atsargų kiekiu"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Tiekėjo informacija"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Kopijuoti kategorijos parametrus"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Esamas paveikslėlis"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Esamos detalės paveikslėlio failo pavadinimas"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Paveikslėlio failas neegzistuoja"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Patvirtinti visą komplektavimo žiniaraštį"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Galima surinkti"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Mažiausia kaina"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Pakeisti apskaičiuotą mažiausią kainą"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Mažiausios kainos valiuta"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Didžiausia kaina"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Pakeisti apskaičiuotą didžiausią kainą"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Didžiausios kainos valiuta"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Atnaujinti"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Atnaujinti šios detalės kainodarą"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Pasirinkite pirminį surinkimą"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Pasirinkite komponentinę detalę"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Pašalinti esamus duomenis"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Pašalinti esamus BOM elementus prieš kopijuojant"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Įtraukti paveldėtus"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Praleisti netinkamas eilutes"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "Kopijuoti pakaitines detales"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Pakuotės įskiepis"
msgid "Plugin"
msgstr "Įskiepis"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Autorius nerastas"
@@ -8021,7 +8292,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"
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Reikalingos medžiagos"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Detalės vaizdas"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Išduota"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Reikalinga objektui"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Serijos numeris"
@@ -8292,7 +8560,7 @@ msgstr "Atsargų elemento bandymo ataskaita"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Sumontuoti elementai"
@@ -8325,6 +8593,10 @@ msgstr "Nėra rezultato (privaloma)"
msgid "No result"
msgstr "Nėra rezultato"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "Žyma part_image reikalauja detalės (Part) egzemplioriaus"
msgid "company_image tag requires a Company instance"
msgstr "Žyma company_image reikalauja įmonės (Company) egzemplioriaus"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filtruoti pagal vietos gylį"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Filtruoti pagal aukščiausio lygio vietas"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Įtraukti sub-vietas į filtravimo rezultatus"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Pirminė vieta"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtruoti pagal pirminę vietą"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Detalės pavadinimas (neskiria didžiųjų ir mažųjų raidžių)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Detalės pavadinimas turi (neskiria didžiųjų ir mažųjų raidžių)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Detalės pavadinimas (reguliarioji išraiška)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Detalės IPN (neskiria didžiųjų ir mažųjų raidžių)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Detalės IPN turi (neskiria didžiųjų ir mažųjų raidžių)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Detalės IPN (reguliarioji išraiška)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Mažiausias kiekis"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Didžiausias kiekis"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Būsenos kodas"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Išorinė vieta"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Sunaudota gamybos užsakyme"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Sumontuota kitame atsargų elemente"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Detalių medis"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Atnaujinta iki"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Atnaujinta po"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Inventorizacija iki"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Inventorizacija po"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Galiojimo data iki"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Galiojimo data po"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Pasenusi"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Reikalingas kiekis"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Turi būti pateikta galiojanti detalė"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Nurodyta tiekėjo detalė neegzistuoja"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Tiekėjo detalė turi nustatytą pakuotės dydį, bet nepažymėtas požymis use_pack_size"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serijos numeriai negali būti pateikti detalei, kurios negalima sekti"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Atsargų vietos tipas"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Atsargų vietos tipai"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Atsargų vieta"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Atsargų vietos"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Savininkas"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Pasirinkite savininką"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Išorinė"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Tai yra išorinė atsargų vieta"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Vietos tipas"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Šios vietos atsargų vietos tipas"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Turi būti nurodyta detalė"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Elementas negali priklausyti pats sau"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Pirminis atsargų elementas"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Pagrindinė detalė"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
msgid "Where is this stock item located?"
msgstr "Kur yra šis atsargų elementas?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Pakuotė, kurioje laikomas šis atsargų elementas"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Sumontuotas į"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Ar šis elementas yra sumontuotas kitame elemente?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Šio elemento serijos numeris"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Šio atsargų elemento partijos kodas"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Atsargų kiekis"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Surinkimo šaltinis"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Surinkimas šiam atsargų elementui"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Sunaudojo"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Gamybos užsakymas, kuris sunaudojo šį atsargų elementą"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Pirkimo užsakymo šaltinis"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Pirkimo užsakymas šiam atsargų elementui"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Pardavimo užsakymo paskirtis"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Ištrinti išnaudojus"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Vieneto pirkimo kaina pirkimo metu"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Konvertuota į detalę"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Detalė nenustatyta kaip sekama"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Kiekis turi būti sveikasis skaičius"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
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:1979
msgid "Quantity does not match serial numbers"
msgstr "Kiekis nesutampa su serijos numeriais"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Bandomasis šablonas neegzistuoja"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
msgid "Stock item is installed in another item"
msgstr "Atsargų elementas sumontuotas kitame elemente"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Atsargų elementas turi kitų elementų"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Atsargų elementas šiuo metu gaminamas"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Pasikartojantys atsargų elementai"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Atsargų būsenos kodai turi sutapti"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Atsargų elemento sekimas"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Įrašo pastabos"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Atsargų elemento bandymo rezultatas"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Šiam bandymui turi būti pateikta reikšmė"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Šiam bandymui turi būti įkeltas priedas"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "Netinkama reikšmė šiam bandymui"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Bandymo rezultatas"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Bandymo išvesties reikšmė"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Bandymo rezultato priedas"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Bandymo pastabos"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Bandymų stotis"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Pradėta"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Bandymo pradžios laiko žyma"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Pabaigta"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Bandymo pabaigos laiko žyma"
@@ -8913,214 +9193,234 @@ msgstr "Naudoti pakuotės dydį pridedant: nurodytas kiekis yra pakuočių skai
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Įveskite serijos numerius naujiems elementams"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Tiekėjo detalės numeris"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Nebegaliojantis"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Antriniai elementai"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Sekami elementai"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Šio atsargų elemento pirkimo kaina, vienetui arba pakuotei"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Įveskite atsargų elementų, kuriuos reikia serializuoti, skaičių"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Paskirties atsargų vieta"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Šiai detalei negali būti priskirti serijos numeriai"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Serijos numeriai jau egzistuoja"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Pasirinkite atsargų elementą montavimui"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Montuojamas kiekis"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Įveskite montuojamų elementų kiekį"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Pridėkite operacijos pastabą (neprivaloma)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Montuojamas kiekis turi būti bent 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Atsargų elementas nepasiekiamas"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Pasirinktos detalės nėra komplektavimo žiniaraštyje"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Montuojamas kiekis negali viršyti turimo kiekio"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Paskirties vieta išmontuotam elementui"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Pasirinkite detalę, į kurią konvertuoti atsargų elementą"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Pasirinkta detalė netinkama konvertavimui"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Negalima konvertuoti atsargų elemento, kuriam priskirta tiekėjo detalė"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Atsargų elemento būsenos kodas"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Pasirinkite atsargų elementus būsenai pakeisti"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Nepasirinkti jokie atsargų elementai"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sub-vietos"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Pirminė atsargų vieta"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Detalė turi būti parduodama"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Elementas priskirtas pardavimo užsakymui"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Elementas priskirtas gamybos užsakymui"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Klientas, kuriam priskiriami atsargų elementai"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Pasirinkta įmonė nėra klientas"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Atsargų priskyrimo pastabos"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Turi būti pateiktas atsargų elementų sąrašas"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Atsargų sujungimo pastabos"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Leisti skirtingus tiekėjus"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Leisti sujungti atsargų elementus su skirtingomis tiekėjų detalėmis"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Leisti skirtingas būsenas"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Leisti sujungti atsargų elementus su skirtingais būsenos kodais"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Turi būti pateikti bent du atsargų elementai"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Be pakeitimų"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Atsargų elemento pirminio rakto reikšmė"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Atsargų elemento nėra sandėlyje"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Atsargų operacijos pastabos"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Kitas serijos numeris"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Ankstesnis serijos numeris"
@@ -9458,150 +9758,158 @@ 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ė"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administratorius"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Pirkimo užsakymai"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Pardavimo užsakymai"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Grąžinimo užsakymai"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Vartotojo vardas"
diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po
index bfd0d048c7..39bef122f0 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Latvian\n"
"Language: lv_LV\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Nevarēja konvertēt {original} par {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Norādītais daudzums nav derīgs"
@@ -104,13 +105,13 @@ msgstr "Ievadiet datumu"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Piezīmes"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po
index 94812a6f16..6e6460e2fb 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Language: nl_NL\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "{original} kon niet worden omgezet naar {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Ongeldige hoeveelheid ingevoerd"
@@ -104,13 +105,13 @@ msgstr "Voer datum in"
msgid "Invalid decimal value"
msgstr "Ongeldige decimale waarde"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Opmerkingen"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Omschrijving"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Omschrijving (optioneel)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Status van bestelling"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Bovenliggende Productie"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Inclusief varianten"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Inclusief varianten"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Inclusief varianten"
msgid "Part"
msgstr "Onderdeel"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categorie"
@@ -605,7 +593,7 @@ msgstr "Categorie"
msgid "Ancestor Build"
msgstr "Voorouderlijke bouw"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Toegewezen aan mij"
@@ -653,374 +641,365 @@ msgstr "Voltooid voor"
msgid "Completed after"
msgstr "Voltooid na"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "Min. datum"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Max. datum"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Boomstructuur uitsluiten"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Verbruiksartikelen"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Optioneel"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Samenstelling"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Gevolgd"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testbaar"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Openstaande order"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Toegewezen"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Verbruikt"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "In bestelling"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr "Build niet gevonden"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Productieorder"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Locatie"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Uitvoer"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Filter op uitvoer standaard item ID. Gebruik 'null' om niet geïnstalleerde build items te vinden."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Productieorders"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Assemblage stuklijst is niet gevalideerd"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Bouw bestelling kan niet worden aangemaakt voor een inactief onderdeel"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Maken opdracht kan niet worden gemaakt voor een ontgrendeld onderdeel"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Bestellingen bouwen kan alleen extern worden vervuld voor aankochte onderdelen"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Verantwoorde gebruiker of groep moet worden opgegeven"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Bouworder onderdeel kan niet worden gewijzigd"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Doeldatum moet na startdatum zijn"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Productieorderreferentie"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referentie"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Korte beschrijving van de build (optioneel)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Productie-opdracht waar dit product aan is toegewezen"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Selecteer onderdeel om te produceren"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Verkooporder Referentie"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Productieopdracht waar dit productie aan is toegewezen"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Bronlocatie"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Externe bouw"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Deze bouw opdracht is extern uitgevoerd"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Bestemmings Locatie"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Productiehoeveelheid"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Aantal voorraaditems om te produceren"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Voltooide voorraadartikelen"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Aantal voorraadartikelen die zijn voltooid"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Productiestatus"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Productiestatuscode"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Batchcode"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Aanmaakdatum"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Bouw start datum"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Geplande startdatum voor deze bestelling"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Verwachte opleveringsdatum"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Opleveringsdatum"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "voltooid door"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Uitgegeven door"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Gebruiker die de productieorder heeft gegeven"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Verantwoordelijke"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Externe Link"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link naar externe URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Bouw prioriteit"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioriteit van deze bouwopdracht"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Project code"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Project code voor deze build order"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Kan de bouwopdracht niet voltooien zolang onderliggende bouwopdrachten nog openstaan"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Kan de bouwopdracht niet voltooien zolang de output onvolledig is"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Verwijderen van taak om toewijzingen te voltooien mislukt"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Productieorder {build} is voltooid"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Een productieorder is voltooid"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Geen productie uitvoer opgegeven"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Productie uitvoer is al voltooid"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Productuitvoer komt niet overeen met de Productieorder"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Hoeveelheid moet groter zijn dan nul"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "Hoeveelheid kan niet groter zijn dan aantal"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "Build output heeft niet alle vereiste tests doorstaan"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Voorraadproducten zijn nog in productie"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Bouw order regel item"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Bouw object"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Bouw object"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Hoeveelheid"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Vereiste hoeveelheid voor bouwopdracht"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Aantal van verbruikte voorraad"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "Toegewezen hoeveelheid moet groter zijn dan nul"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Voorraad item is te veel toegewezen"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Voorraadartikel"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Bron voorraadartikel"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Voorraad hoeveelheid toe te wijzen aan productie"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Installeren in"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Bestemming voorraadartikel"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Bouw level"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Onderdeel naam"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Productieuitvoer"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Deze productieuitvoer is al voltooid"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Deze productieuitvoer is niet volledig toegewezen"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Voer hoeveelheid in voor productie uitvoer"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serienummers"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Voer serienummers in voor productieuitvoeren"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Voorraad locatie voor project uitvoer"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Serienummers automatisch toewijzen"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "De volgende serienummers bestaan al of zijn ongeldig"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Een lijst van productieuitvoeren moet worden verstrekt"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Voorraadlocatie voor geannuleerde outputs"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Toewijzingen weggooien"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Reden voor annulering van bouworder(s)"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Locatie van voltooide productieuitvoeren"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Incomplete Toewijzing Accepteren"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Toegewezen voorraad gebruiken"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Verbruik elke voorraad die al is toegewezen aan deze build"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Verwijder Incomplete Uitvoeren"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Niet toegestaan"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Overgealloceerde voorraad"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Hoe wilt u omgaan met extra voorraaditems toegewezen aan de bouworder"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Sommige voorraadartikelen zijn overalloceerd"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Accepteer Niet-toegewezen"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze productieorder"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Vereiste voorraad is niet volledig toegewezen"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Accepteer Onvolledig"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Accepteer dat het vereist aantal productieuitvoeren niet is voltooid"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Vereiste productiehoeveelheid is voltooid"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Bouw opdracht heeft open sub bouw orders"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Bouwen moet in de productiestatus staan"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Productieorder heeft onvolledige uitvoeren"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Productielijn"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Productieuitvoer"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Productieuitvoer moet naar dezelfde productie wijzen"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Bouw lijn-item"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Artikel moet op voorraad zijn"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Beschikbare hoeveelheid ({q}) overschreden"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde onderdelen"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Allocaties voor artikelen moeten worden opgegeven"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Voorraadlocatie waar onderdelen afkomstig zijn (laat leeg om van elke locatie te nemen)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Locatie uitsluiten"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Uitwisselbare voorraad"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Vervangende Voorraad"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Toewijzing van vervangende onderdelen toestaan"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Optionele Items"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Alloceer optionele BOM items om bestelling te bouwen"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "Alle artikelen"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "Niet Gevolgde items"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "Gevolgde Items"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "Item Type"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "Selecteer item type om automatisch toe te wijzen"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOM referentie"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOM onderdeel ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "BOM onderdeel naam"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "Instaleeren Op"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Bouwen"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Leveranciersonderdeel"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Toegewezen hoeveelheid"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Bouw referentie"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Naam categorie onderdeel"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Volgbaar"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Overgenomen"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Varianten toestaan"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Stuklijstartikel"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "In productie"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Gepland om te bouwen"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Externe voorraad"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Beschikbare Voorraad"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Beschikbare vervanging voorraad"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Beschikbare varianten voorraad"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Optionele notities voor voorraadverbruik"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Dupliceer build item allocatie"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Build line moet verwijzen naar de juiste bouwopdracht"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Dupliceer build line toewijzing"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Ten minste één item of regel moet worden opgegeven"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Bezig"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Productie"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "In de wacht"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Geannuleerd"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Voltooid"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Productieorder {build} is voltooid"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Een productieorder is voltooid"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Voorraad vereist voor productieorder"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Bouw order {build} vereist extra voorraad"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Achterstallige Productieorder"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Productieorder {bo} is nu achterstallig"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Is koppeling"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Is een bestand"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen."
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Bijgewerkt"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Tijdstempel van laatste update"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Bijgewerkt door"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Gebruiker die dit object voor het laatst heeft bijgewerkt"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unieke projectcode"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projectbeschrijving"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Instellingen"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Instellingswaarde"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Gekozen waarde is geen geldige optie"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Waarde moet een booleaanse waarde zijn"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Waarde moet een geheel getal zijn"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Waarde moet een geldig getal zijn"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Waarde is niet geldig voor validatiecontrole"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Prijs"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Stukprijs op opgegeven hoeveelheid"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Eindpunt"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Eindpunt waarop deze webhook wordt ontvangen"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Is deze webhook actief"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Sleutel"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token voor toegang"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Geheim"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Gedeeld geheim voor HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Bericht ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Unieke identificatie voor dit bericht"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Host waarvan dit bericht is ontvangen"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Koptekst"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Koptekst van dit bericht"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Berichtinhoud"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Inhoud van dit bericht"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Eindpunt waarop dit bericht is ontvangen"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Aan gewerkt"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Is het werk aan dit bericht voltooid?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titel"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Koppeling"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Gepubliceerd"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Auteur"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Samenvatting"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Gelezen"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Is dit nieuwsitem gelezen?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Afbeelding"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Doel type voor deze afbeelding"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "Doel modelnummer voor deze afbeelding"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Aangepaste eenheid"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Eenheid symbool moet uniek zijn"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Naam van eenheid"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbool"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Optionele eenheid symbool"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definitie"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definitie van eenheid"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Bijlage"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Ontbrekend bestand"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Externe link ontbreekt"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Model type"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Doel type voor afbeelding"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Bestand als bijlage selecteren"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Opmerking"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Opmerking van bijlage"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Uploaddatum"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Datum waarop het bestand is geüpload"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Bestandsgrootte"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Bestandsgrootte in bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Ongeldig modeltype opgegeven voor bijlage"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Aangepaste staat"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Aangepaste statussen"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Referentie status set"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Logische sleutel"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Waarde"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Label"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Kleur"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Kleur die in de frontend getoond wordt"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Model met deze staat is gekoppeld aan"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Het model moet worden gekozen"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Sleutel moet worden geselecteerd"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Logische sleutel moet worden geselecteerd"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "Sleutel moet anders zijn dan logische sleutel"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "Geldige referentie status klasse moet worden opgegeven"
-#: common/models.py:2192
+#: common/models.py:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Keuzelijst"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Selectielijst"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Naam van de selectielijst"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Beschrijving van de selectielijst"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Vergrendeld"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Is deze selectielijst vergrendeld?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Kan deze selectielijst worden gebruikt?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Bron plug-in"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Plug-in die de selectielijst biedt"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Bron tekenreeks"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Standaard vermelding"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "Standaard vermelding voor deze selectielijst"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Gecreëerd"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Laatst bijgewerkt"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Selectielijst item"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Selectielijst item"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Selectielijst waaraan dit item hoort"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Naam van de selectielijst"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Label voor het item in de selectielijst"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Beschrijving van het item in de selectielijst"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Is dit item in deze lijst actief?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parameter sjabloon"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Parameter sjablonen"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Checkbox parameters kunnen geen eenheden bevatten"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Checkbox parameters kunnen geen eenheden bevatten"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Keuzes moeten uniek zijn"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "De template van de parameter moet uniek zijn"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "Doelmodeltype voor dit parametersjabloon"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Parameternaam"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Eenheden"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Fysieke eenheden voor deze parameter"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Parameter omschrijving"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Selectievakje"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Is deze parameter een selectievak?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Keuzes"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Geldige keuzes voor deze parameter (komma gescheiden)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Lijst met selecties voor deze parameter"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Ingeschakeld"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Is dit parametersjabloon ingeschakeld?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Parameter"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Parameters"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Ongeldige keuze voor parameter waarde"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Ongeldig modeltype opgegeven voor parameter"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "Model-ID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Parameter sjabloon"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Gegevens"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "Parameterwaarde"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Opmerking"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Optioneel notities veld"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Barcode Scan"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Barcode gegevens"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "Gebruiker die de barcode gescand heeft"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Tijdstempel"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Datum en tijd van de streepjescode scan"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Inhoud"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Contextgegevens voor de barcode scan"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Reactie"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultaat"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Was de barcode succesvol gescand?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Er is een fout opgetreden"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "E-mailbericht"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "E-mail berichten"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Aangekondigd"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Verzonden"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Mislukt"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Geleverd"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Bevestigd"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Inkomend"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Uitgaand"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Geen antwoord"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Track levering"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Track gelezen"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Track Klik"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Globaal ID"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "Discussie ID"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Gesprek"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Gekoppeld onderwerp voor dit bericht"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Prioriteit"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "E-mail gesprekken"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "E-mail gesprekken"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Unieke identificatie voor dit bericht"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Intern gestart"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Is dit onderwerp intern gestart?"
-#: common/models.py:3200
+#: common/models.py:3376
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:3381
msgid "Date and time that the thread was last updated"
msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Ontvangen items"
@@ -2451,25 +2491,25 @@ msgstr "Trefwoord argumenten"
msgid "Task keyword arguments"
msgstr "Taak trefwoord argumenten"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Model type"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lijst met selecties is vergrendeld"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dagen"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Interval voor update"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatische backup"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automatische backup interval"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Interval Taak Verwijderen"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Error Log Verwijderings Interval"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Interval Verwijderen Notificatie"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "E-mail verwijderen interval"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Bescherm e-maillogboeken"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "Voorkom het verwijderen van e-mail logs"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Streepjescodeondersteuning"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Sla de resultaten van de barcode op"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Maximale aantal Barcode Scans"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Barcode Invoer Vertraging"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Barcode invoerverwerking vertraging"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Barcode Webcam Ondersteuning"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Barcode gegevens"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Streepjescode Plug-in"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Herzieningen onderdeel"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Revisieveld voor onderdeel inschakelen"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Alleen assemblee revisie"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Alleen revisies toestaan voor assemblageonderdelen"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Verwijderen uit Assemblage toestaan"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "IPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Duplicaat IPN toestaan"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Bewerken IPN toestaan"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Kopieer Onderdeel Stuklijstgegevens"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Kopieer Onderdeel Parametergegevens"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Kopieer Onderdeel Testdata"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kopiëer Categorieparameter Sjablonen"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Onderdelen zijn standaard sjablonen"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Onderdeel"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Koopbaar"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Verkoopbaar"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Onderdelen kunnen standaard verkocht worden"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtueel"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Onderdelen zijn standaard virtueel"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Verwante onderdelen tonen"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Verwante onderdelen voor een onderdeel tonen"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Initiële voorraadgegevens"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Initiële leveranciergegevens"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Onderdelennaam Weergaveopmaak"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Opmaak om de onderdeelnaam weer te geven"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Standaardicoon voor onderdeel catagorie"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Minimaal aantal prijs decimalen"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Maximum prijs decimalen"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Gebruik leveranciersprijzen"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Aankoopgeschiedenis overschrijven"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Gebruik voorraaditem prijzen"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Voorraad artikelprijs leeftijd"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Gebruik variantprijzen"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "Variantenprijzen opnemen in de totale prijsberekening"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "Alleen actieve varianten"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Prijzen automatisch bijwerken"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Prijzen Herbouw interval"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Interne Prijzen"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Inschakelen van interne prijzen voor onderdelen"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Interne prijs overschrijven"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr "BOM Zero Quantity toestaan"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Printen van labels Inschakelen"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Label Afbeelding DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Activeer Rapportages"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Activeer het genereren van rapporten"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Foutopsporingsmodus"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Log fouten"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Standaard paginagrootte voor PDF rapporten"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Forceer Parameter Eenheden"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globaal unieke serienummers"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Verwijder uitgeputte voorraad"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "Bepaalt standaard gedrag wanneer een voorraadartikel leeg is"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Batchcode Sjabloon"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Verlopen Voorraad"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Verlopen voorraad functionaliteit inschakelen"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Verkoop Verlopen Voorraad"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Verkoop verlopen voorraad toestaan"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Voorraad Vervaltijd"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Produceer Verlopen Voorraad"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Sta productie met verlopen voorraad toe"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Voorraad Eigenaar Toezicht"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Voorraadlocatie standaard icoon"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Geïnstalleerde voorraad items weergeven"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "Controleer BOM bij het installeren van items"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Sta 'Niet op voorraad overschrijving' toe"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Productieorderreferentiepatroon"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Vereist een actief onderdeel"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Vergrendeld onderdeel vereisen"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Vereist een geldige BOM"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Onderliggende bestellingen vereist"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Externe Bouw Orders"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Inschakelen externe build order functionaliteit"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blokkeren tot test geslaagd"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Voorkom dat de bouw van de uitvoer wordt voltooid totdat alle vereiste testen zijn geslaagd"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Retourorders inschakelen"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Retourorder referentie patroon"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Verplicht patroon voor het genereren van Retourorder referentie veld"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Bewerk voltooide retourorders"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Verkooporderreferentiepatroon"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Standaard Verzending Verkooporder"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Aanmaken standaard verzending bij verkooporders inschakelen"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Bewerk voltooide verkooporders"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Bewerken van verkooporders toestaan nadat deze zijn verzonden of voltooid"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Zending moet gecontroleerd worden"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Voorkom voltooiing van verzendingen totdat items zijn gecontroleerd"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Verstuurde bestellingen markeren als voltooid"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Verkooporders gemarkeerd als verzonden zullen automatisch worden voltooid, zonder de status \"verzonden\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Inkooporderreferentiepatroon"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Bewerk voltooide verkooporders"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Valuta converteren"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Inkooporders automatisch voltooien"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Wachtwoord vergeten functie inschakelen"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Registratie inschakelen"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "SSO inschakelen"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "SSO inschakelen op de inlogpagina's"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Schakel gebruikersregistratie met SSO in"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "SSO-groep synchroniseren inschakelen"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "SSO groep sleutel"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "SSO groep kaart"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Verwijder groepen buiten SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "E-mailadres verplicht"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "SSO-gebruikers automatisch invullen"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "E-mail twee keer"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Wachtwoord tweemaal"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Toegestane domeinen"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Groep bij aanmelding"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "MFA afdwingen"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Gebruikers moeten multifactor-beveiliging gebruiken."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Controleer plugins bij het opstarten"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Controleren op plug-in updates"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Activeer URL-integratie"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Activeer navigatie integratie"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Plugins toestaan om te integreren in navigatie"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Activeer app integratie"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Activeer plug-ins om apps toe te voegen"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Activeer planning integratie"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Activeer evenement integratie"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Interface integratie activeren"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "E-mail integratie inschakelen"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Activeer project codes"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr "Voorraadcontrole inschakelen"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Externe locaties uitsluiten"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
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:1180
msgid "Automatic Stocktake Period"
msgstr "Automatische Voorraadcontrole Periode"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr "Aantal dagen tussen automatische voorraadgegevens opnemen"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr "Oude voorraadgegevens verwijderen"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
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:1195
msgid "Stocktake Deletion Interval"
msgstr "Interval Voorraadgegevens verwijderen"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
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:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "Oude voorraadgegevens verwijderen"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr "Inverval voor verwijderen van voorraadtracking"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Gebruikers volledige namen weergeven"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Gebruikersprofielen tonen"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "Toon gebruikersprofielen op hun profielpagina"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Inschakelen van teststation data"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr "Machine Ping inschakelen"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
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"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Uitgeschakeld: Het volledige categorie pad wordt weergegeven als hover tooltip. Ingeschakeld: Het pad van de volledige categorie wordt weergegeven als platte tekst."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Foutrapportages ontvangen"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Meldingen ontvangen van systeemfouten"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Laatst gebruikte printer"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Sla de laatst gebruikte printer op voor een gebruiker"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Alle modellen"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Geen bijlage model type opgegeven"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Ongeldig bijlage type"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Minimale plaatsen mogen niet groter zijn dan het maximum"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Maximum aantal plaatsen kan niet minder zijn dan minimaal"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Een leeg domein is niet toegestaan."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Ongeldige domeinnaam: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "De waarde moet hoofdletters zijn"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Waarde moet een geldige variabele id zijn"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabrikant"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Bedrijf"
@@ -4050,8 +4193,8 @@ msgstr "Telefoonnummer voor contact"
msgid "Contact email address"
msgstr "Contact e-mailadres"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contact"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adres"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Basis onderdeel"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "Fabrikant artikel nummer"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Fabrikant artikel nummer (MPN)"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Leverancier"
@@ -4254,7 +4397,7 @@ msgstr "Leverancier"
msgid "Select supplier"
msgstr "Leverancier selecteren"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Voorraad beheers eenheid voor leveranciers"
@@ -4282,16 +4425,16 @@ msgstr "URL voor link externe leveranciers onderdeel"
msgid "Supplier part description"
msgstr "Omschrijving leveranciersdeel"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "basisprijs"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Minimale kosten (bijv. voorraadkosten)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Verpakking"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "meerdere"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr "Oorspronkelijke rij gegevens"
msgid "Errors"
msgstr "Fouten"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Geldig"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Onbekend"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ 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:132
msgid "Order Reference"
msgstr "Order Referentie"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Uitmuntend"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Heeft een projectcode"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Aangemaakt Door"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Gemaakt vóór"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Gemaakt na"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Heeft vervaldatum"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Vervaldatum voor"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Vervaldatum na"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Heeft doel datum"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Doel datum voor"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Doel datum na"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "Bijgewerkt voor"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "Bijgewerkt na"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Heeft prijsstelling"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Voltooid voor"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Voltooid na"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Bestellen"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Bestelling voltooid"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Intern onderdeel"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Bestelling in behandeling"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Voltooid"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Heeft verzending"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,775 +5005,849 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Retour bestelling"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Totaalprijs"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Totaalprijs van deze bestelling"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Valuta bestelling"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Deze bestelling is vergrendeld en kan niet worden gewijzigd"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Contact komt niet overeen met het geselecteerde bedrijf"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Startdatum moet voor einddatum liggen"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "Adres komt niet overeen met het geselecteerde bedrijf"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Bestelling beschrijving (optioneel)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link naar externe pagina"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Start datum"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Streefdatum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Verwachte datum voor levering van de bestelling. De bestelling wordt achterstallig na deze datum."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Datum van uitgifte"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Order uitgegeven op datum"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "Bijgewerkt op"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Gebruiker of groep verantwoordelijk voor deze order"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Contactpunt voor deze volgorde"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Bedrijf adres voor deze bestelling"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Inkooporder status"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Bedrijf waar de artikelen van worden besteld"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Leveranciersreferentie"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Order referentiecode van leverancier"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "ontvangen door"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Order voltooid op datum"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Bestemming"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Bestemming voor ontvangen items"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Artikelregel komt niet overeen met inkooporder"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Regelitem mist een gekoppeld deel"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Hoeveelheid moet een positief getal zijn"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Bedrijf waaraan de artikelen worden verkocht"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Verkooporder status"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Klantreferentie "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Klant order referentiecode"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Verzenddatum"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "verzonden door"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Bestelling is al afgerond"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Order is al geannuleerd"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Hoeveelheid artikelen"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Artikelregel referentie"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Artikel notities"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Regelomschrijving (optioneel)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Additionele context voor deze regel"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Stukprijs"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Inkooporder regel item"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Leveranciersonderdeel moet overeenkomen met leverancier"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "Bouw bestelling moet worden gemarkeerd als extern"
-#: order/models.py:1951
+#: order/models.py:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Leveranciersonderdeel"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Ontvangen"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Aantal ontvangen artikelen"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Inkoopprijs"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Aankoopprijs per stuk"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Extra regel inkooporder"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Verkooporder regel item"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Verkoopprijs"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Prijs per stuk"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Verzonden"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Verzonden hoeveelheid"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Verzending van verkooporder"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "Verzendadres moet overeenkomen met de klant"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Verzendadres voor deze zending"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Datum van verzending"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Leveringsdatum"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Datum van levering van zending"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Gecontroleerd door"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Zending"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Zendingsnummer"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Volgnummer"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Zending volginformatie"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Factuurnummer"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Referentienummer voor bijbehorende factuur"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Verzending is al verzonden"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Zending heeft geen toegewezen voorraadartikelen"
-#: order/models.py:2446
+#: order/models.py:2516
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:2586
msgid "Sales Order Extra Line"
msgstr "Verkooporder extra regel"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Toewijzing verkooporder"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Voorraadartikel is niet toegewezen"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel"
-#: order/models.py:2605
+#: order/models.py:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Regel"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Verzendreferentie verkooporder"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Artikel"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Selecteer voorraadartikel om toe te wijzen"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Voer voorraadtoewijzingshoeveelheid in"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Retour order referentie"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Bedrijf van waaruit items worden teruggestuurd"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Retour bestelling status"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Retourneer bestelregel item"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Voorraad item moet worden opgegeven"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "Het retour aantal moet groter zijn dan nul"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Selecteer te retourneren product van de klant"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Ontvangst datum"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "De datum waarop dit retour item is ontvangen"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Resultaat"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Resultaat van deze regel item"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Retourneren extra regel"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Bestelling ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID van de bestelling om te dupliceren"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Kopieer regels"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Kopieer regelitems uit de oorspronkelijke bestelling"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Extra regels kopiëren"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Parameters kopiëren"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Artikelen"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Afgeronde regel items"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Artikel dupliceren"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Specificeer opties voor het dupliceren van deze bestelling"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Ongeldige order ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Leveranciers Naam"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Order kan niet worden geannuleerd"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Bestelling heeft onvolledige regelitems"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Order is niet open"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automatisch prijzen"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Valuta Inkoopprijs"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Items samenvoegen"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Intern Onderdeelnummer"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Interne naam onderdeel"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Leveranciersonderdeel moet worden gespecificeerd"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Inkooporder moet worden gespecificeerd"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "De leverancier moet overeenkomen met de inkooporder"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "Inkooporder moet overeenkomen met de leverancier"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Artikel"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Vervaldatum"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "Voer vervaldatum in voor inkomende voorraad items"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Voer serienummers in voor inkomende voorraadartikelen"
-#: order/serializers.py:888
+#: order/serializers.py:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Extra opmerking voor inkomende voorraad items"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Streepjescode"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Gescande streepjescode"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Streepjescode is al in gebruik"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Artikelen moeten worden opgegeven"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Bestemmingslocatie moet worden opgegeven"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Geleverde streepjescodewaarden moeten uniek zijn"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Verzendingen"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Voltooide Verzendingen"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "Toegewezen lijnen"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Valuta verkoopprijs"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Toegewezen items"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Geen verzenddetails opgegeven"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "Artikelregel is niet gekoppeld aan deze bestelling"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Hoeveelheid moet positief zijn"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Verzending is al verzonden"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Zending is niet gekoppeld aan deze bestelling"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Geen overeenkomst gevonden voor de volgende serienummers"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "De volgende serienummers zijn niet beschikbaar"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Retourneer regel item"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Artikelregel komt niet overeen met inkooporder"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Regel item is al ontvangen"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Hoeveelheid te retourneren"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Lijn prijs valuta"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Kwijt"
@@ -5662,6 +5880,11 @@ msgstr "Restitutie"
msgid "Reject"
msgstr "Afwijzen"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Uitgegeven"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Achterstallige inkooporder"
@@ -5697,7 +5920,7 @@ msgstr "Favoriet"
msgid "Filter by starred categories"
msgstr "Filter op categorieën met ster"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Diepte"
@@ -5705,7 +5928,7 @@ msgstr "Diepte"
msgid "Filter by category depth"
msgstr "Filteren op categorie diepte"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Hoogste niveau"
@@ -5713,7 +5936,7 @@ msgstr "Hoogste niveau"
msgid "Filter by top-level categories"
msgstr "Filteren op topniveau categorieën"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Stapelen"
@@ -5733,75 +5956,79 @@ msgstr "Filter op bovenliggende categorie"
msgid "Exclude sub-categories under the specified category"
msgstr "Subcategorieën uitsluiten in de opgegeven categorie"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Heeft resultaten"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Is een variant"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Is revisie"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Heeft revisies"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM Valid"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Cascade Categorieën"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "Bouw onderdeel is actief"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "Bouw onderdeel is te volgen"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Assemblage deel is testbaar"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "Onderdeel is actief"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "Onderdeel is trackable"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Component onderdeel is testbaar"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "Onderdeel is nog te bouwen"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "Onderdeel is virtueel"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "Heeft beschikbare voorraad"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Gebruik"
@@ -5810,11 +6037,11 @@ msgstr "Gebruik"
msgid "Part Category"
msgstr "Onderdeel Categorie"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5822,7 +6049,7 @@ msgstr "Standaard locatie"
msgid "Default location for parts in this category"
msgstr "Standaard locatie voor onderdelen in deze categorie"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Structureel"
@@ -5838,12 +6065,12 @@ msgstr "Standaard trefwoorden"
msgid "Default keywords for parts in this category"
msgstr "Standaard trefwoorden voor delen in deze categorie"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Pictogram"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Pictogram (optioneel)"
@@ -5863,984 +6090,1028 @@ msgstr "Standaard waarde"
msgid "Default Parameter Value"
msgstr "Standaard Parameter Waarde"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Verkopen van meerdere"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Valuta die gebruikt wordt voor de cache berekeningen"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimale BOM kosten"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minimale kosten van onderdelen"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maximale BOM kosten"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maximale kosten van onderdelen"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimale aankoop kosten"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimale historische aankoop kosten"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maximale aanschaf kosten"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maximum historische aankoop kosten"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimale interne prijs"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimale kosten op basis van interne prijsschommelingen"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maximale interne prijs"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maximale kosten gebaseerd op interne prijsvoordelen"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimale leverancier prijs"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Minimale prijs van onderdeel van externe leveranciers"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maximale leverancier prijs"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maximale prijs van onderdeel van externe leveranciers"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimale variant kosten"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Berekende minimale kosten van variant onderdelen"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maximale variant kosten"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Berekende maximale kosten van variant onderdelen"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimale kostprijs"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Overschrijf minimale kosten"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maximale kosten"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Overschrijf maximale kosten"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Berekende minimale kosten"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Berekende totale maximale kosten"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimale verkoop prijs"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maximale verkoop prijs"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimale verkoop prijs"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimale historische verkoop prijs"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maximale verkoop prijs"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maximale historische verkoop prijs"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Onderdeel voor voorraadcontrole"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Getelde items"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Totale voorraad op het moment van voorraadcontrole"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Datum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Datum waarop voorraad werd uitgevoerd"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimale voorraadprijs"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Geschatte minimum kosten van de voorraad op de hand"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maximale voorraadkosten"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Geschatte maximale kosten van de hand van voorraad"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Periodieke verkoopprijs voor onderdelen"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Sjabloon test onderdeel"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen"
-#: part/models.py:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Test naam"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Geef een naam op voor de test"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Test sleutel"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Vereenvoudigde sleutel voor de test"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Test beschrijving"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Voer beschrijving in voor deze test"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Is deze test ingeschakeld?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Vereist"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Is deze test nodig om te doorlopen?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Waarde vereist"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Vereist bijlage"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Geldige keuzes voor deze parameter (komma gescheiden)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld "
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Selecteer boven liggend onderdeel"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sub onderdeel"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "BOM hoeveelheid voor dit BOM item"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Dit BOM item is optioneel"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Totale hoeveelheid"
-#: part/models.py:4009
+#: part/models.py:4141
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:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Attriatie"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Afronden meerdere"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Artikelregel referentie"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOM item notities"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Controle som"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOM lijn controle som"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Goedgekeurd"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Dit BOM item is goedgekeurd"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Wordt overgenomen"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Onderdeel moet gespecificeerd worden"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOM Item vervangingen bewerken"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Bovenliggend BOM item"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Vervanging onderdeel"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Eerste deel"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Tweede deel"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Selecteer gerelateerd onderdeel"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Opmerking voor deze relatie"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Dubbele relatie bestaat al"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Bovenliggende categorie"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Bovenliggende onderdeel categorie"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Subcategorieën"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Resultaten"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Inkooporder voor dit voorraadartikel"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Bestand is geen afbeelding"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Oorspronkelijk onderdeel"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Selecteer origineel onderdeel om te dupliceren"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Afbeelding kopiëren"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copy BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Kopieer materiaal van het oorspronkelijke deel"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Parameter data kopiëren van het originele onderdeel"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Notities kopiëren"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Kopieer notities van het originele deel"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Tests kopiëren"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "Test sjablonen kopiëren van het originele deel"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Eerste voorraad hoeveelheid"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Eerste voorraad locatie"
-#: part/serializers.py:459
+#: part/serializers.py:478
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:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Fabrikant artikel nummer"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Geselecteerde onderneming is geen geldige leverancier"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Geselecteerde bedrijf is geen geldige fabrikant"
-#: part/serializers.py:529
+#: part/serializers.py:548
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:555
msgid "Supplier part matching this SKU already exists"
msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Categorie naam"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Bouwen"
-#: part/serializers.py:846
+#: part/serializers.py:870
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:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Voorraadartikelen"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revisies"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Niet toegewezen voorraad"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Variant voorraad"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Dupliceer onderdeel"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Kopieer eerste gegevens uit een ander onderdeel"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Eerste voorraad"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Maak onderdeel met eerste voorraad"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Leveranciersgegevens"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Categorie parameters kopiëren"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Bestaande afbeelding"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Bestandsnaam van een bestaande onderdeel afbeelding"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Afbeeldingsbestand bestaat niet"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Valideer de gehele materiaalbon"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Kan bouwen"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Vereist voor bouworders"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Toegewezen aan bouwen van orders"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Vereist voor verkooporders"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Toegewezen aan verkooporders"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "IPN onderdeel"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "Onderdeel omschrijving"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "Rapport Maken"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minimale prijs"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Overschrijf berekende waarde voor minimale prijs"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Minimale prijs valuta"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maximale prijs"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Overschrijf de berekende waarde voor de maximale prijs"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Maximale prijs valuta"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Bijwerken"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Prijzen voor dit onderdeel bijwerken"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Selecteer de bovenliggende assemblage"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Selecteer het onderdeel"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Selecteer onderdeel om BOM van te kopiëren"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Bestaande gegevens verwijderen"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Verwijder bestaande BOM items voor het kopiëren"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Inclusief overgenomen"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Ongeldige regels overslaan"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Verwijder vervangend deel"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items"
@@ -7092,15 +7363,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"
@@ -7161,7 +7432,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
@@ -7507,20 +7778,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"
@@ -7561,7 +7832,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"
@@ -7763,7 +8034,7 @@ msgstr "Pakket plug-in"
msgid "Plugin"
msgstr "Plug-in"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Geen auteur gevonden"
@@ -8022,7 +8293,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"
@@ -8066,112 +8337,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"
@@ -8226,13 +8497,10 @@ msgstr "Benodigde materialen"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Afbeelding onderdeel"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Uitgegeven"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Vereist Voor"
@@ -8268,7 +8536,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Serienummer"
@@ -8293,7 +8561,7 @@ msgstr "Rapport voorraadcontrole"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Geïnstalleerde items"
@@ -8326,6 +8594,10 @@ msgstr "Geen resultaat (verplicht)"
msgid "No result"
msgstr "Geen resultaat"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8354,491 +8626,499 @@ msgstr "part_image tag vereist een onderdeel instantie"
msgid "company_image tag requires a Company instance"
msgstr "bedrijf_imagetag vereist een bedrijfsinstantie"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filter op locatie diepte"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Filter op topniveau locaties"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Inclusief sublocaties in gefilterde resultaten"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Bovenliggende locatie"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filter op bovenliggende locatie"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Naam van onderdeel (hoofdletter ongevoelig)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Naam van onderdeel bevat (hoofdletter ongevoelig)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Naam onderdeel (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Deel IPN (hoofdletter ongevoelig)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Onderdeel IPN bevat (hoofdletter ongevoelig)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Deel IPN (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Minimale voorraad"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Maximale voorraad"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Status code"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Externe locatie"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Verbruikt door productieorder"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Geïnstalleerd in een ander voorraadartikel"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Boomstructuur onderdeel"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Eerder bijgewerkt"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Bijgewerkt na"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Voorraadcontrole voor"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Voorraadcontrole na"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Vervaldatum voor"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Vervaldatum na"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Verouderd"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Voorraad PK om dit item en al zijn afstammelingen uit te sluiten"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Cascade locaties"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Indien waar, inclusief items op de onderliggende locaties van de opgegeven locatie"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Filter op numerieke locatie ID of de letterlijke 'null'"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Hoeveelheid is vereist"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Geldig onderdeel moet worden opgegeven"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Het opgegeven leveranciers onderdeel bestaat niet"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Het leveranciersdeel heeft een pakketgrootte gedefinieerd, maar vlag use_pack_size niet ingesteld"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Inclusief geïnstalleerde"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Als correct, geef testresultaten voor items die onder het opgegeven voorraadartikel zijn geïnstalleerd"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Filter op numerieke voorraadartikel ID"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "Voorraadartikel met ID {id} bestaat niet"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "Inclusief Onderdeel varianten"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "Datum na"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "Datum voor"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Voorraad locatie soort"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Voorraad locatie soorten"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Voorraadlocatie"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Voorraadlocaties"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Eigenaar"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Selecteer eigenaar"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Extern"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Dit is een externe voorraadlocatie"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Locatie type"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Voorraad locatie type van deze locatie"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} bestaat niet"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Onderdeel moet gespecificeerd worden"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Item kan niet tot zichzelf behoren"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Bovenliggend voorraad item"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Basis onderdeel"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "Waar bevindt zich dit voorraaditem?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Het verpakken van dit voorraaditem is opgeslagen in"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Geïnstalleerd in"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
msgid "Serial number for this item"
msgstr "Serienummer van dit item"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Batch code voor dit voorraaditem"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Voorraad hoeveelheid"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Bron Bouw"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Build voor dit voorraaditem"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Verbruikt door"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Bestelling bouwen welke dit voorraadartikel heeft verbruikt"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Inkooporder Bron"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Inkooporder voor dit voorraadartikel"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Bestemming Verkooporder"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Verwijderen bij leegmaken"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Omgezet tot onderdeel"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Hoeveelheid overschrijdt beschikbare voorraad"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Onderdeel is niet ingesteld als traceerbaar"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Hoeveelheid moet heel getal zijn"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr "Serienummers moeten als lijst worden opgegeven"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Hoeveelheid komt niet overeen met serienummers"
-#: stock/models.py:1936
+#: stock/models.py:1997
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:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Testsjabloon bestaat niet"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "Voorraadartikel is toegewezen aan een verkooporder"
-#: stock/models.py:2075
+#: stock/models.py:2136
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:2139
msgid "Stock item contains other items"
msgstr "Voorraadartikel bevat andere producten"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Voorraad item is momenteel in productie"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Geserialiseerde voorraad kan niet worden samengevoegd"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Dupliceer voorraadartikelen"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "Voorraadartikelen moeten hetzelfde onderdeel verwijzen"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "Voorraadartikelen moeten verwijzen naar dezelfde leveranciersdeel"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "De voorraad statuscodes moeten overeenkomen"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Voorraad item volgen"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Item notities"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Resultaat voorraad test resultaten"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Waarde moet voor deze test worden opgegeven"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Bijlage moet worden geüpload voor deze test"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "Ongeldige waarde voor deze test"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Test resultaat"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Test uitvoer waarde"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Test resultaat bijlage"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Test notities"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Test station"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Gestart"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Het tijdstip van de start test"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Afgerond"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Het tijdstip van de afgeronde test"
@@ -8914,214 +9194,234 @@ msgstr "Gebruik pakketgrootte bij het toevoegen: de hoeveelheid gedefinieerd is
msgid "Use pack size"
msgstr "Gebruik pakketgrootte"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Voer serienummers voor nieuwe items in"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Leverancier artikelnummer"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Verlopen"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Onderliggende items"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Items volgen"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Aantal voorraaditems om serienummers voor te maken"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "Geen voorraad item opgegeven"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Locatie van bestemming"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Serienummers kunnen niet worden toegewezen aan dit deel"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Serienummers bestaan al"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Selecteer voorraaditem om te installeren"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Te installeren hoeveelheid"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Voer de te installeren hoeveelheid items in"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Transactienotitie toevoegen (optioneel)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Te installeren hoeveelheid moet minimaal 1 zijn"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Voorraadartikel is niet beschikbaar"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Het geselecteerde deel zit niet in de materialen lijst"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "De te installeren hoeveelheid mag niet groter zijn dan de beschikbare hoeveelheid"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Bestemmingslocatie voor verwijderd item"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Selecteer onderdeel om voorraaditem om te zetten in"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Het geselecteerde deel is geen geldige optie voor de omzetting"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Kan voorraadartikel niet converteren met toegewezen leverancier deel"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Voorraad status code"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Selecteer voorraadartikelen om status te wijzigen"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Geen voorraaditems geselecteerd"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sublocaties"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Bovenliggende voorraad locatie"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Onderdeel moet verkoopbaar zijn"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Artikel is toegewezen aan een verkooporder"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Artikel is toegewezen aan een productieorder"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Klant om voorraadartikelen toe te wijzen"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Geselecteerde bedrijf is geen klant"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Voorraad toewijzing notities"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Een lijst met voorraad artikelen moet worden opgegeven"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Voorraad samenvoegen notities"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Niet overeen komende leveranciers toestaan"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Toestaan dat voorraadartikelen met verschillende leveranciers onderdelen worden samengevoegd"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Sta onjuiste status toe"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Toestaan dat voorraadartikelen met verschillende statuscodes worden samengevoegd"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Er moeten ten minste twee voorraadartikelen worden opgegeven"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Geen wijziging"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Voorraaditem primaire sleutel waarde"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Voorraad artikel is niet op voorraad"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Voorraad artikel is al in voorraad"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Hoeveelheid mag niet negatief zijn"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Voorraad transactie notities"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Samenvoegen in bestaande voorraad"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Volgend serienummer"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Vorig serienummer"
@@ -9459,150 +9759,158 @@ 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"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administrator"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Inkooporders"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Verkooporders"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Retour orders"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Gebruikersnaam"
diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po
index 0844cce8f3..9a98a87787 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Language: no_NO\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Kunne ikke konvertere {original} til {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Ugyldig mengde oppgitt"
@@ -104,13 +105,13 @@ msgstr "Oppgi dato"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notater"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Beskrivelse"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Beskrivelse (valgfritt)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Ordrestatus"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Overordnet produksjon"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Del"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategori"
@@ -605,7 +593,7 @@ msgstr "Kategori"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Produksjonen må avbrytes før den kan slettes"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Forbruksvare"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Valgfritt"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Sammenstilling"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Spores"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Tildelt"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "I bestilling"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Produksjonsordre"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Plassering"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Produksjonsordrer"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Sammenstillings-BOMen er ikke godkjent"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Produksjonsordre kan ikke opprettes for en ulåst del"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Ansvarlig bruker eller gruppe må spesifiseres"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Produksjonsordrens del kan ikke endres"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Produksjonsordre-referanse"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referanse"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Kort beskrivelse av produksjonen (valgfritt)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Velg del å produsere"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Salgsordrereferanse"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Kildeplassering"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Velg plassering å ta lagerbeholdning fra for denne produksjonen (la stå tomt for a ta fra alle lagerplasseringer)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Fullført plassering"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Velg plassering der fullførte artikler vil bli lagret"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Produksjonsmengde"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Antall lagervarer å produsere"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Fullførte artikler"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Antall lagervarer som er fullført"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Produksjonsstatus"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Produksjonsstatuskode"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Batchkode"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Opprettelsesdato"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Forventet sluttdato"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Fullført dato"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "fullført av"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Utstedt av"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Brukeren som utstedte denne produksjonsordren"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Ansvarlig"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Bruker eller gruppe ansvarlig for produksjonsordren"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Ekstern lenke"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Lenke til ekstern URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Produksjonsprioritet"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Produksjonsordrens prioritet"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Prosjektkode"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Prosjektkode for denne produksjonsordren"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Produksjonsordre {build} er fullført"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "En produksjonsordre er fullført"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Serienumre må angis for sporbare deler"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Ingen produksjonsartikkel spesifisert"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Produksjonsartikkelen er allerede fullført"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Mengden må være større enn null"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Produksjonsartikkel"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Produksjonsobjekt"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Produksjonsobjekt"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Antall"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Påkrevd antall for produksjonsordre"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Valgt lagervare samsvarer ikke med BOM-linjen"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Mengden må være 1 for serialisert lagervare"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Lagervaren er overtildelt"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Lagervare"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Kildelagervare"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Lagerantall å tildele til produksjonen"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Monteres i"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Lagervare for montering"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Delnavn"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Produksjonsartikkel"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Resultatdel samsvarer ikke med produksjonsordredel"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Denne produksjonsartikkelen er allerede fullført"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Denne produksjonsartikkelen er ikke fullt tildelt"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Angi antall for produksjonsartikkel"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Heltallsverdi kreves for sporbare deler"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serienummer"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Angi serienummer for produksjonsartikler"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Lagerplassering for produksjonsartikkel"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automatisk tildeling av serienummer"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Følgende serienummer finnes allerede eller er ugyldige"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "En liste over produksjonsartikler må oppgis"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Lagerplassering for skrotede produksjonsartikler"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Forkast tildelinger"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Forkast tildelinger fra skrotede produksjonsartikler"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Grunn for skroting av produksjonsartikler"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Plassering for ferdige produksjonsartikler"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Godta ufullstendig tildeling"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Bruk tildelt lagerbeholdning"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Bruk all lagerbeholdning som allerede er tildelt denne produksjonen"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Fjern ufullstendige artikler"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Slett alle produksjonsartikler som ikke er fullført"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Ikke tillatt"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Godta som brukt av denne produksjonsordren"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Fjern tildeling før produksjonsordren fullføres"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Overtildelt lagerbeholdning"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Hvordan vil du håndtere ekstra lagervarer tildelt produksjonsordren"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Noen lagervarer har blitt overtildelt"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Godta ikke tildelt"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Godta at lagervarer ikke er fullt tildelt til denne produksjonsordren"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Godta uferdig"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Godta at nødvendig antall fullførte produksjonsartikler ikke er nådd"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Nødvendig produksjonsmengde er ikke nådd"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Produksjonsordren har uferdige artikler"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Produksjonslinje"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Produksjonsartikkel"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Produksjonsartikkel må peke til samme produksjon"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Produksjonsartikkel"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part må peke på den samme delen som produksjonsordren"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Artikkelen må være på lager"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Tilgjengelig antall ({q}) overskredet"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Tildelingsartikler må oppgis"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Lagerplassering hvor deler skal hentes (la stå tomt for å ta fra alle plasseringer)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Eksluderer plassering"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Ekskluder lagervarer fra denne valgte plasseringen"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Utskiftbar lagerbeholdning"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Erstatning-lagerbeholdning"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Tilatt tildelling av erstatningsdeler"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Valgfrie artikler"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Tildel valgfrie BOM-artikler til produksjonsordre"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOM-referanse"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Leverandørdel"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Tildelt antall"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Produksjonsreferanse"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Delkategorinavn"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Sporbar"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Nedarvet"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Tillat Varianter"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "BOM-artikkel"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "I produksjon"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Ekstern lagerbeholdning"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Tilgjengelig lagerbeholdning"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Tilgjengelige erstatningsvarer"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Tilgjengelige variantvarer"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Ventende"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produksjon"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Kansellert"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Fullført"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Produksjonsordre {build} er fullført"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "En produksjonsordre er fullført"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Lagerbeholdning kreves for produksjonsordre"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Forfalt produksjonsordre"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Produksjonsordre {bo} er nå forfalt"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Er lenke"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Er fil"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Oppdatert"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Tidsstempel for forrige oppdatering"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unik prosjektkode"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Prosjektbeskrivelse"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Innstillings verdi"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Valgt verdi er ikke et gyldig alternativ"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Verdien må være en boolsk verdi"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Verdien må være et heltall"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Pris"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Enhetspris på spesifisert antall"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Endepunkt"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Endepunktet hvor denne webhooken er mottatt"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "Navn for webhooken"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Er webhooken aktiv"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Sjetong"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Nøkkel for tilgang"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Hemmelig"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Delt hemmlighet for HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Melding ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Unik Id for denne meldingen"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Vert"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Verten denne meldingen ble mottatt fra"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Tittel"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Overskrift for denne meldingen"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Brødtekst"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Innholdet i meldingen"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Endepunktet meldingen ble mottatt fra"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Arbeidet med"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Var arbeidet med denne meldingen ferdig?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Tittel"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Lenke"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publisert"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Forfatter"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Sammendrag"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Les"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Er dette nyhetselementet lest?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Bildefil"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Enhetssymbolet må være unikt"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Enhetsnavn må være en gyldig identifikator"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Enhetsnavn"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Valgfritt enhetssymbol"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definisjon"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Enhetsdefinisjon"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Vedlegg"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Fil mangler"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Mangler eksternlenke"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Velg fil å legge ved"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Vedleggskommentar"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Opplastet dato"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Datoen som filen ble lastet opp"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Filstørrelse"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Filstørrelse i byte"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Ugyldig modelltype spesifisert for vedlegg"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Verdi"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Opprettet"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Sist oppdatert"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parametermal"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Sjekkboksparameter kan ikke ha enheter"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Sjekkboksparameter kan ikke ha valg"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Valg må være unike"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Navn på parametermal må være unikt"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Parameternavn"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Enheter"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Fysisk enheter for denne parameteren"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Parameterbeskrivelse"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Sjekkboks"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Er dette parameteret en sjekkboks?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Valg"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Gyldige valg for denne parameteren (kommaseparert)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Aktivert"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Ugyldig valg for parameterverdi"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "Parameterverdi"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Notat"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Valgfritt notatfelt"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontekst"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultat"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Artikler mottatt"
@@ -2451,25 +2491,25 @@ msgstr "Nøkkelordargumenter"
msgid "Task keyword arguments"
msgstr "Nøkkelordargumenter for oppgave"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Modelltype"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dager"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "Valgt valutaoppdaterings-plugin"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "Last ned fra URL"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
msgid "Require schema specification when validating URLs"
msgstr "Krev skjemaspesifikasjon ved validering av URLer"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "Intervall for oppdateringssjekk"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatisk sikkerhetskopiering"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automatisk sikkerhetskopieringsintervall"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Slettingsintervall for oppgaver"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Slettingsintervall for feillogg"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Slettingsintervall for varsler"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Strekkodestøtte"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Innlesingsforsinkelse for strekkode"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Tidsforsinkelse for behandling av strekkode"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Støtte for strekkodewebkamera"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "Tillat strekkodelesning via webkamera i nettleseren"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "Vis Strekkodedata"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "Vis strekkodedata som tekst"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Delrevisjoner"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Aktiver revisjonsfeltet for Del"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Tilat duplikat av internt delnummer"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Tillat redigering av internt delnummer"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Kopier BOM-data fra del"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Kopier parameterdata fra del"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Kopier testdata fra del"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kopier designmaler for kategoriparametere"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Deler er maler som standard"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponent"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Kjøpbar"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Salgbar"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Deler er salgbare som standard"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuelle"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Deler er virtuelle som standard"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Vis relaterte deler"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Vis relaterte deler i en del"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Innledende lagerbeholdningsdata"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Innledende leverandørdata"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Visningsformat for delnavn"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Format for å vise delnavnet"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Standardikon for delkategorier"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Minimum antall desimalplasser for priser"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Maksimalt antall desimalplasser for priser"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Bruk leverandørpriser"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Innkjøpshistorikkoverstyring"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Bruk lagervarepriser"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Lagervare prisalder"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Bruk Variantpriser"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Kun aktive varianter"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Intervall for rekalkulering av priser"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Interne Priser"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Aktiver interne priser for deler"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Intern prisoverstyring"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Aktiver etikettutskrift"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "Aktiver utskrift av etiketter fra nettleseren"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "Etikettbilde-DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Aktiver Rapporter"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Aktiver generering av rapporter"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Feilsøkingsmodus"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Standard sidestørrelse for PDF-rapporter"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Tving parameterenheter"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globalt Unike Serienummer"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Slett oppbrukt lagerbeholdning"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Batchkodemal"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Lagerbeholdning utløper"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Selg utløpt lagerbeholdning"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Tillat salg av utgått lagerbeholdning"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Foreldet lagerbeholdning tidsintervall"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Produsér Utløpt Lagerbeholdning"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Tillat produksjon med utløpt lagerbeholdning"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Kontroll over eierskap av lagerbeholdning"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Lagerplassering standard ikon"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Vis installerte lagervarer"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Vis installerte lagervarer i lagertabeller"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Produksjonsordre-referansemønster"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Aktiver returordrer"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Returordre-referansemønster"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Rediger fullførte returordrer"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Tillat redigering av returordrer etter de er fullført"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Salgsordre-referansemønster"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Påkrevd mønster for å generere salgsordrereferansefelt"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Salgsordre standard fraktmetode"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Rediger fullførte salgsordrer"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Referansemønster for innkjøpsordre"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Rediger fullførte innkjøpsordre"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Autofullfør innkjøpsordrer"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Aktiver passord glemt"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Aktiver registrering"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Aktiver SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Aktiver SSO på innloggingssidene"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Aktiver SSO-registrering"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr ""
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "E-postadresse kreves"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Auto-utfyll SSO-brukere"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "E-post to ganger"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Passord to ganger"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Tillatte domener"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Gruppe ved registrering"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Krev MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Brukere må bruke flerfaktorsikkerhet."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Sjekk utvidelser ved oppstart"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr ""
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "Aktiver URL-integrasjon"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Tillat utvidelser å legge til URL-ruter"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Aktiver navigasjonsintegrasjon"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Tillat utvidelser å integrere mot navigasjon"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Aktiver app-integrasjon"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Tillat utvidelser å legge til apper"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Aktiver tidsplanintegrasjon"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Tillat utvidelser å kjøre planlagte oppgaver"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Aktiver hendelsesintegrasjon"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "Tillat utvidelser å reagere på interne hendelser"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Ekskluder eksterne plasseringer"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Automatisk varetellingsperiode"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Vis brukernes fulle navn"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Motta feilrapporter"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Motta varsler om systemfeil"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr ""
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Ingen modelltype angitt for vedlegg"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Ugyldig modelltype for vedlegg"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Minste antall plasser kan ikke være mer enn største antall plasser"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Største antall plasser kan ikke være mindre enn minste antall plasser"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Et tomt domene er ikke tillatt."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Ugyldig domenenavn: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Produsent"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Firma"
@@ -4050,8 +4193,8 @@ msgstr "Kontakt-telefonnummer"
msgid "Contact email address"
msgstr "Kontakt e-post"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adresse"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Basisdel"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Produsentens varenummer"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Leverandør"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Leverandørens lagerbeholdningsenhet"
@@ -4282,16 +4425,16 @@ msgstr "URL for ekstern leverandørdel-lenke"
msgid "Supplier part description"
msgstr "Leverandørens delbeskrivelse"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "grunnkostnad"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Emballasje"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "flere"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Gyldig"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Ukjent"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Ordrereferanse"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Opprettet av"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Ordre"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Intern del"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Fullført"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Returordre"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Total pris"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Total pris for denne ordren"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Ordrevaluta"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Kontakten samsvarer ikke med valgt firma"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Ordrebeskrivelse (valgfritt)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Lenke til ekstern side"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Måldato"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Forventet dato for levering av ordre. Bestillingen vil være forfalt etter denne datoen."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Sendt dato"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Dato bestillingen ble sendt"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Bruker eller gruppe ansvarlig for ordren"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Kontaktpunkt for denne ordren"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Selskapsadresse for denne ordren"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Status for innkjøpsordre"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Firma som varene blir bestilt fra"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Leverandørreferanse"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Leverandørens ordrereferanse"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "mottatt av"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Dato ordre ble fullført"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destinasjon"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Delleverandør må matche PO-leverandør"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Linjeelementet samsvarer ikke med innkjøpsordre"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Mengde må være positiv"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Firma som varene selges til"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Kundereferanse "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Kundens ordrereferanse"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Forsendelsesdato"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "sendt av"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Antall"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Linjereferanse"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Linjenotater"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Linjeelementbeskrivelse (valgfritt)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Ytterligere kontekst for denne linjen"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Enhetspris"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Delens leverandør må samsvare med leverandør"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Leverandørdel"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Mottatt"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Antall enheter mottatt"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Innkjøpspris"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Enhet-innkjøpspris"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Salgspris"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Enhets-salgspris"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Sendt"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Sendt antall"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Dato for forsendelse"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Leveringsdato"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Dato for levering av forsendelse"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Sjekket Av"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Forsendelse"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Forsendelsesnummer"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Sporingsnummer"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Sporingsinformasjon for forsendelse"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Fakturanummer"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Referansenummer for tilknyttet faktura"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Forsendelsen er allerede sendt"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Forsendelsen har ingen tildelte lagervarer"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Lagervarer er ikke blitt tildelt"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Linje"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Forsendelsesreferanse for salgsordre"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Artikkel"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Velg lagervare å tildele"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Angi lagertildelingsmengde"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Returordre-referanse"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Firmaet delen skal returneres fra"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Returordrestatus"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Velg artikkel som skal returneres fra kunde"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Mottatt Dato"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Utfall"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Utfall for dette linjeelementet"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopier parametere"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Linjeelementer"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Leverandørnavn"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Ordren kan ikke kanselleres"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Ordren har ufullstendige linjeelementer"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Ordren er ikke åpen"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Innkjøpsvaluta"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU-kode"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Internt delnummer"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Leverandørdel må angis"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Innkjøpsordre må angis"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Leverandør må samsvare med innkjøpsordre"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Ordrelinje"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Velg lagerplassering for mottatte enheter"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Utløpsdato"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Angi serienummer for innkommende lagervarer"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Strekkode"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Skannet strekkode"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Strekkode allerede i bruk"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Linjeelementer må være oppgitt"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Målplassering må angis"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Angitte strekkodeverdier må være unike"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Fullførte forsendelser"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Valuta for salgspris"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Ingen forsendelsesopplysninger oppgitt"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "Linjeelement er ikke knyttet til denne ordren"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Mengden må være positiv"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Skriv inn serienummer for å tildele"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Forsendelsen er allerede sendt"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Forsendelsen er ikke knyttet til denne ordren"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Ingen treff funnet for følgende serienummer"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Returordrelinje"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Linjeelementet samsvarer ikke med returordre"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Linjeelementet er allerede mottatt"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Valuta for linje"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Tapt"
@@ -5661,6 +5879,11 @@ msgstr "Refusjon"
msgid "Reject"
msgstr "Avvis"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Utstedt"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Forfalt Innkjøpsordre"
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Delkategori"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Standard plassering"
msgid "Default location for parts in this category"
msgstr "Standardplassering for deler i denne kategorien"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Strukturell"
@@ -5837,12 +6064,12 @@ msgstr "Standard nøkkelord"
msgid "Default keywords for parts in this category"
msgstr "Standard nøkkelord for deler i denne kategorien"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikon"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikon (valgfritt)"
@@ -5862,984 +6089,1028 @@ msgstr "Standardverdi"
msgid "Default Parameter Value"
msgstr "Standard Parameterverdi"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Selg flere"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Valuta som brukes til å bufre prisberegninger"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimal BOM-kostnad"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minste kostnad for komponentdeler"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maksimal BOM-kostnad"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maksimal kostnad for komponentdeler"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimal innkjøpskostnad"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimal historisk innkjøpskostnad"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maksimal innkjøpskostnad"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maksimal historisk innkjøpskostnad"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimal intern pris"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimal kostnad basert på interne prisbrudd"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maksimal intern pris"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maksimal kostnad basert på interne prisbrudd"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimal leverandørpris"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Minimumspris for del fra eksterne leverandører"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maksimal leverandørpris"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maksimalpris for del fra eksterne leverandører"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimal Variantkostnad"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Beregnet minimal kostnad for variantdeler"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maksimal Variantkostnad"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Beregnet maksimal kostnad for variantdeler"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimal kostnad"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Overstyr minstekostnad"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maksimal kostnad"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Overstyr maksimal kostnad"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Beregnet samlet minimal kostnad"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Beregnet samlet maksimal kostnad"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimal salgspris"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Minimal salgspris basert på prisbrudd"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maksimal Salgspris"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maksimal salgspris basert på prisbrudd"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimal Salgskostnad"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimal historisk salgspris"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maksimal Salgskostnad"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maksimal historisk salgspris"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Del for varetelling"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Antall"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Dato"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Dato for utført lagertelling"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimal lagerkostnad"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Estimert minimal kostnad for lagerbeholdning"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maksimal lagerkostnad"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Estimert maksimal kostnad for lagerbeholdning"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Testnavn"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Angi et navn for testen"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Testbeskrivelse"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Legg inn beskrivelse for denne testen"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Påkrevd"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Er det påkrevd at denne testen bestås?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Krever verdi"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Krever vedlegg"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Velg overordnet del"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Underordnet del"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Velg del som skal brukes i BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "BOM-antall for denne BOM-artikkelen"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Denne BOM-artikkelen er valgfri"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "BOM-artikkelreferanse"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOM-artikkelnotater"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Kontrollsum"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOM-linje kontrollsum"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Godkjent"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Denne BOM-artikkelen er godkjent"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Arves"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler"
-#: part/models.py:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Antall må være heltallsverdi for sporbare deler"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Underordnet del må angis"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOM-artikkel erstatning"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "Erstatningsdel kan ikke være samme som hoveddelen"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Overordnet BOM-artikkel"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Erstatningsdel"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Del 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Del 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Velg relatert del"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Duplikatforhold eksisterer allerede"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Underkategorier"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Innkjøpsvaluta for lagervaren"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Original Del"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Velg original del å duplisere"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopier Bilde"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Kopier bilde fra originaldel"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Kopier Stykkliste"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Kopier stykkliste fra original del"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Kopier parameterdata fra originaldel"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Kopier notater"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Kopier notater fra originaldel"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Innledende lagerbeholdning"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Innledende lagerplassering"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Angi initiell lagerplasering for denne delen"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Produsentens delenummer"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Valgt firma er ikke en gyldig leverandør"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Valgt firma er ikke en gyldig produsent"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "Produsentdel som matcher dette MPN-et, finnes allerede"
-#: part/serializers.py:536
+#: part/serializers.py:555
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:840
msgid "Category Name"
msgstr "Kategorinavn"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Produseres"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Lagervarer"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Dupliser del"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Kopier innledende data fra en annen del"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Innledende lagerbeholdning"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Lag en del med innledende lagermengde"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Leverandøropplysninger"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Legg til innledende leverandørinformasjon for denne delen"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Kopier kategoriparametre"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Kopier parametermaler fra valgt delkategori"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Eksisterende bilde"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Filnavn for et eksisterende del-bilde"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Bildefilen finnes ikke"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Godkjenn hele Stykklisten"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Kan Produsere"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minstepris"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Overstyr beregnet verdi for minimumspris"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Valuta for minstepris"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Makspris"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Overstyr beregnet verdi for maksimal pris"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Valuta for maksimal pris"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Oppdater"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Oppdater priser for denne delen"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Velg del å kopiere BOM fra"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Fjern eksisterende data"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Fjern eksisterende BOM-artikler før kopiering"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Inkluder arvede"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Hopp over ugyldige rader"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "Kopier erstatningsdeler"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres"
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Utvidelse"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Ingen forfatter funnet"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Nødvendige materialer"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Bilde av del"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Utstedt"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Kreves for"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Serienummer"
@@ -8292,7 +8560,7 @@ msgstr "Testrapport for lagervare"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Installerte artikler"
@@ -8325,6 +8593,10 @@ msgstr "Ingen resultat (obligatorisk)"
msgid "No result"
msgstr "Ingen resultat"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "part_image-taggen krever en Part-instans"
msgid "company_image tag requires a Company instance"
msgstr "company_image-taggen krever en Company-instans"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Statuskode"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Ekstern plassering"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Del-tre"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Utløpsdato før"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Utløpsdato etter"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Foreldet"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Antall kreves"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Gyldig del må oppgis"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Oppgitt leverandørdel eksisterer ikke"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serienumre kan ikke angis for en ikke-sporbar del"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Lagerplasseringstype"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Lagerplasseringstyper"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Lagerplassering"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Lagerplasseringer"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Eier"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Velg eier"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Ekstern"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Dette er en ekstern lagerplassering"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Plasseringstype"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Lagerplasseringstype for denne plasseringen"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Elementet kan ikke tilhøre seg selv"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Overordnet lagervare"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Basisdel"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
msgid "Where is this stock item located?"
msgstr "Hvor er denne lagervaren plassert?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Inpakningen denne lagervaren er lagret i"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Installert i"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Er denne artikkelen montert i en annen artikkel?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Serienummer for denne artikkelen"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Batchkode for denne lagervaren"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Lagerantall"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Kildeproduksjon"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Produksjon for denne lagervaren"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Brukt av"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Produksjonsordren som brukte denne lagervaren"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Kildeinnkjøpsordre"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Innkjøpsordre for denne lagervaren"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Tildelt Salgsordre"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Slett når oppbrukt"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "Slett lagervaren når beholdningen er oppbrukt"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Innkjøpspris per enhet på kjøpstidspunktet"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Konvertert til del"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Delen er ikke angitt som sporbar"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Antall må være heltall"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Antallet stemmer ikke overens med serienumrene"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "Lagervare har blitt tildelt en salgsordre"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "Lagervare er montert i en annen artikkel"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Lagervare inneholder andre artikler"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Lagervare er for tiden i produksjon"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Duplisert lagervare"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "Lagervarer må referere til samme del"
-#: stock/models.py:2106
+#: stock/models.py:2167
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:2172
msgid "Stock status codes must match"
msgstr "Lagerstatuskoder må være like"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Oppføringsnotater"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Verdi må angis for denne testen"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Vedlegg må lastes opp for denne testen"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Testresultat"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Testens verdi"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Vedlegg til testresultat"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Testnotater"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr "Bruk pakningsstørrelse når du legger til: antall definert er antall pa
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Angi serienummer for nye artikler"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Leverandørens delnummer"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Utløpt"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Underordnede artikler"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Angi antall lagervarer som skal serialiseres"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Til Lagerplassering"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Serienummer kan ikke tilordnes denne delen"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Seriernummer eksisterer allerede"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Velg lagervare å montere"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Antall å installere"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Angi antallet elementer som skal installeres"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Legg til transaksjonsnotat (valgfritt)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Antall å installere må være minst 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Lagervaren er utilgjengelig"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Valgt del er ikke i stykklisten"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Antall å installere må ikke overskride tilgjengelig antall"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Lagerplassering for den avinstallerte artikkelen"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Velg del å konvertere lagervare til"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Valgt del er ikke et gyldig alternativ for konvertering"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Lagervare statuskode"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Velg lagervarer for å endre status"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Ingen lagervarer valgt"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Underplasseringer"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Delen må være salgbar"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Artikkelen er tildelt en salgsordre"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Artikkelen er tildelt en produksjonsordre"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Kunde å tilordne lagervarer"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Valgt firma er ikke en kunde"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Lagervare-tildelignsnotater"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "En liste av lagervarer må oppgis"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notater om lagersammenslåing"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Tillat forskjellige leverandører"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Tillat forskjellig status"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Minst to lagervarer må oppgis"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Lagervare primærnøkkel verdi"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Lager transaksjonsnotater"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administrator"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Innkjøpsordrer"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Salgsordre"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Returordrer"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Brukernavn"
diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po
index abaaa80f1e..7f331ec23d 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Nie udało się przeliczyć {original} na {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Podano nieprawidłową ilość"
@@ -104,13 +105,13 @@ msgstr "Wprowadź dane"
msgid "Invalid decimal value"
msgstr "Niepoprawna wartość dziesiętna"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Uwagi"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Opis"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Opis (opcjonalny)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Waluta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Status zamówienia"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Budowa nadrzędna"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Obejmuje warianty"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Obejmuje warianty"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Obejmuje warianty"
msgid "Part"
msgstr "Komponent"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategoria"
@@ -605,7 +593,7 @@ msgstr "Kategoria"
msgid "Ancestor Build"
msgstr "Budowa poprzednika"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Przypisane do mnie"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Minimalna data"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Maksymalna data"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Wyklucz drzewo"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Materiał eksploatacyjny"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcjonalne"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Złożenie"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Śledzony"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testowalne"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Zaległe zamówienie"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Przydzielono"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "W Zamówieniu"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Zlecenie Budowy"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lokalizacja"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Wyjście"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Zlecenia budowy"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Zbiór BOM nie został zatwierdzony"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Zlecenie budowy nie może być utworzone dla nieaktywnej części"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Zlecenie budowy nie może zostać utworzone dla odblokowanej części"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Nie można zmienić elementu kompletacji"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Data docelowa musi być po dacie rozpoczęcia"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Odwołanie do zamówienia wykonania"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referencja"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Krótki opis produkcji (opcjonalny)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Wybierz część do budowy"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Odwołanie do zamówienia sprzedaży"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Lokalizacja źródła"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Budowa zewnętrzna"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Lokalizacja docelowa"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Ilość do stworzenia"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Ilość przedmiotów do zbudowania"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Ukończone elementy"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Ilość produktów magazynowych które zostały ukończone"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Status budowania"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Kod statusu budowania"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Kod partii"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Data utworzenia"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Data rozpoczęcia budowy"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Zaplanowana data rozpoczęcia dla tego zamówienia budowy"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Docelowy termin zakończenia"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Data zakończenia"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "zrealizowane przez"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Wydany przez"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Użytkownik, który wydał to zamówienie"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Odpowiedzialny"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link Zewnętrzny"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link do zewnętrznego adresu URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Priorytet budowy"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Priorytet tego zamówienia produkcji"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Kod projektu"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Kod projektu dla tego zlecenia produkcji"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Nie udało się wyładować zadania, aby ukończyć alokację budowli"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Kolejność kompilacji {build} została zakończona"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Kolejność kompilacji została zakończona"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Należy podać numery seryjne dla lokalizowania części"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nie określono danych wyjściowych budowy"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Budowanie wyjścia jest już ukończone"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Ilość musi być większa niż zero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Zbuduj obiekt"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Zbuduj obiekt"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Ilość"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Wymagana ilość dla zlecenia produkcji"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Ilość musi wynosić 1 dla serializowanych zasobów"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Pozycja magazynowa jest nadmiernie przydzielona"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Element magazynowy"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Lokalizacja magazynowania przedmiotu"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Ilość zapasów do przydzielenia do produkcji"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Zainstaluj do"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Docelowa lokalizacja magazynowa przedmiotu"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Poziom budowania"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nazwa komponentu"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Numer seryjny"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automatycznie przydzielaj numery seryjne"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Odrzuć przydziały"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Zaakceptuj niekompletną alokację"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Usuń produkcje, które nie zostały zakończone"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Niedozwolone"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Nadmierny przydział zasobów"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Zaakceptuj nieprzydzielone"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Wymagany stan nie został w pełni przypisany"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Akceptuj niekompletne"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Towar musi znajdować się w magazynie"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Dostępna ilość ({q}) przekroczona"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Magazyn, z którego mają być pozyskane elementy (pozostaw puste, aby pobrać z dowolnej lokalizacji)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Wyklucz lokalizację"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Magazyn wymienny"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Zastępczy magazyn"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Przedmiot opcjonalny"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Odniesienie BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID części BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nazwa części BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Wersja"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Część dostawcy"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Ilość zarezerwowana"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Możliwość śledzenia"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Zezwalaj na warianty"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Element BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "W produkcji"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Zew. zasoby magazynowe"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Dostępna ilość"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Dostępny magazyn zastępczy"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "W toku"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produkcja"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Wstrzymane"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Anulowano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Zakończono"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Kolejność kompilacji {build} została zakończona"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Kolejność kompilacji została zakończona"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Jest plikiem"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr "Brak wtyczki"
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Zaktualizowany"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Data ostatniej aktualizacji"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Zaktualizowano przez"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Użytkownik, który ostatnio zaktualizował ten obiekt"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unikalny kod projektu"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Opis projektu"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Klucz ustawień"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Ustawienia wartości"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Wybrana wartość nie jest poprawną opcją"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Wartość musi być wartością binarną"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Wartość musi być liczbą całkowitą"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Wartość musi być poprawną liczbą"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Wartość nie zgadza się z kontrolą poprawności"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Cena"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Punkt końcowy"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token dostępu"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Sekret"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Współdzielony sekret dla HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Id wiadomości"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Unikalny identyfikator dla tej wiadomości"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Host, od którego otrzymano tę wiadomość"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Nagłówek"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Nagłówek tej wiadomości"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Zawartość"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Treść tej wiadomości"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Opracowany na"
-#: common/models.py:1620
+#: common/models.py:1626
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:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Tytuł"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Łącze"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Opublikowano"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Podsumowanie"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Czytaj"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Czy ta wiadomość była przeczytana?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Plik obrazu"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Jednostka Niestandardowa"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Symbol jednostki musi być unikalny"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Nazwa jednostki musi być prawidłowym identyfikatorem"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Nazwa jednostki"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Opcjonalny symbol jednostki"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definicja"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definicja jednostki"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Załącznik"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Brak pliku"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Brak zewnętrznego odnośnika"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Typ modelu"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Docelowy typ modelu dla obrazu"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Wybierz plik do załączenia"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentarz"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Komentarz do załącznika"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Data dodania"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Data przesłania pliku"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Rozmiar pliku"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Rozmiar pliku w bajtach"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Wartość"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etykieta"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Kolor"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Model musi być wybrany"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Klucz musi być wybrany"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Zablokowany"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Utworzony"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Ostatnia aktualizacja"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Jednostki"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Aktywne"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Dane"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Uwaga"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Wynik"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Doręczono"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Typ modelu"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista wyboru jest zablokowana"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dni"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "Pobierz z adresu URL"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+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 "Ścisła weryfikacja adresu URL"
-#: common/setting/system.py:311
+#: common/setting/system.py:298
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:303
msgid "Update Check Interval"
msgstr "Częstotliwość sprawdzania aktualizacji"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatyczna kopia zapasowa"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Interwał automatycznego tworzenia kopii zapasowych"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Interwał usuwania zadań"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Obsługa kodu kreskowego"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "Wyrażenie regularne IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "Zezwól na powtarzający się IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "Zezwól na edycję IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "Skopiuj BOM komponentu"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponent"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Możliwość zakupu"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Możliwość sprzedaży"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Wirtualny"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Części są domyślnie wirtualne"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Pokaż powiązane części"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "Użyj cennika dostawcy"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "Nadpisanie historii zakupów"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "Ceny wewnętrzne"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Włącz drukowanie etykiet"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI etykiety"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "Włącz raporty"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Tryb Debugowania"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:951
+msgid "Required pattern for generating Purchase Order reference field"
+msgstr ""
+
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr ""
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "Przekonwertuj walutę"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Automatycznie wypełniaj zlecenia zakupu"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Włącz opcję zapomnianego hasła"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Włącz rejestrację"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Włącz SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Włącz SSO na stronach logowania"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Włącz rejestrację SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Włącz synchronizację grupy SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Adres e-mail jest wymagany"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "Autouzupełnianie użytkowników SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "E-mail dwa razy"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Hasło dwukrotnie"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr ""
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "Grupuj przy rejestracji"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Wymuś MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Sprawdź wtyczki przy starcie"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "Sprawdź dostępność aktualizacji wtyczek"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Włącz integrację URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr ""
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr ""
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Włącz integrację z aplikacją"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Włącz wtyczki, aby dodać aplikacje"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr ""
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr ""
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "Włącz kody projektów"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Pusta domena nie jest dozwolona."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Niepoprawna nazwa domeny: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Producent"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Firma"
@@ -4050,8 +4193,8 @@ msgstr "Numer telefonu kontaktowego"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adres"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Część bazowa"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Numer producenta komponentu"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Dostawca"
@@ -4254,7 +4397,7 @@ msgstr "Dostawca"
msgid "Select supplier"
msgstr "Wybierz dostawcę"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "koszt podstawowy"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Opakowanie"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "wielokrotność"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Ważny"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Nieznany"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Numer zamówienia"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Utworzony przez"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Posiada ceny"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Zamówienie"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Komponent wewnętrzny"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Zamówienie oczekujące"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Zakończone"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Cena całkowita"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link do zewnętrznej witryny"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Data docelowa"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Data wydania"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Data wystawienia zamówienia"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Status zamówienia zakupu"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "odebrane przez"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Przeznaczenie"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Pozycja nie pasuje do zlecenia zakupu"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Wartość musi być liczbą dodatnią"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Data wysyłki"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "wysłane przez"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Ilość elementów"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Odebrane"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Cena zakupu"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Cena zakupu jednostkowego"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "Cena sprzedaży"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Jednostkowa cena sprzedaży"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Wysłane"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Wysłana ilość"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Data wysyłki"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Sprawdzone przez"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Przesyłka"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Numer przesyłki"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Numer śledzenia"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informacje o śledzeniu przesyłki"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Przesyłka została już wysłana"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Linia"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Komponent"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopiuj parametry"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Zamówienie nie może zostać anulowane"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Zlecenie zakupu musi być określone"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Dostawca musi być zgodny ze zleceniem zakupu"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: 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:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Kod kreskowy"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Zagubiono"
@@ -5661,6 +5879,11 @@ msgstr "Zwrot pieniędzy"
msgid "Reject"
msgstr "Odrzuć"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Wydany"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Zaległe zlecenie zakupu"
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Kategoria komponentu"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Domyślna lokalizacja"
msgid "Default location for parts in this category"
msgstr "Domyślna lokalizacja dla komponentów w tej kategorii"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr "Domyślne słowa kluczowe"
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr "Wartość domyślna"
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Sprzedaj wiele"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Data"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nazwa testu"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Testowy opis"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Wprowadź opis do tego testu"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Wymagane"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Wymaga wartości"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Wymaga załącznika"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr "Wybierz część nadrzędną"
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr "Podczęść"
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr "Ten element BOM jest opcjonalny"
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr "Notatki pozycji BOM"
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr "Suma kontrolna"
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr "Zatwierdzone"
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr "Wybierz część nadrzędną"
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr "Podczęść"
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr "Ten element BOM jest opcjonalny"
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr "Notatki pozycji BOM"
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr "Suma kontrolna"
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr "Zatwierdzone"
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Część zastępcza"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Część 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Część 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Wybierz powiązaną część"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Podkategorie"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Waluta zakupu tego towaru"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopiuj obraz"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Kopiuj BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Towary"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Duplikuj część"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Usuń istniejące dane"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "Pomiń nieprawidłowe wiersze"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Wtyczka"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nie znaleziono autora"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Obraz części"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Wydany"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Numer Seryjny"
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Zainstalowane elementy"
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Lokacje stanu magazynowego"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Właściciel"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Wybierz właściciela"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "Nadrzędny towar"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Część podstawowa"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Zainstalowane w"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Ilość w magazynie"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Wyszukaj zlecenie zakupu"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Zlecenie zakupu dla tego towaru"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "Usuń po wyczerpaniu"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Ilość musi być liczbą całkowitą"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Notatki do wpisu"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Należy podać wartość dla tego testu"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Wynik testu"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Termin minął"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Elementy podrzędne"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Numer seryjny już istnieje"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Podlokalizacje"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Część musi być dostępna do sprzedaży"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Zlecenia zakupu"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po
index 29d2b4a536..2371801fa0 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Language: pt_PT\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Não foi possível converter {original} para {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Quantidade fornecida inválida"
@@ -104,13 +105,13 @@ msgstr "Insira uma Data"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Anotações"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descrição"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descrição (opcional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Moeda"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Situação do pedido"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Produção Progenitor"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Peça"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categoria"
@@ -605,7 +593,7 @@ msgstr "Categoria"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Produção deve ser cancelada antes de ser deletada"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumível"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montagem"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Monitorado"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Alocado"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "No pedido"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Ordem de Produção"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Local"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Ordens de Produções"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Usuário ou grupo responsável deve ser especificado"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Peça da ordem de produção não pode ser alterada"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referência do pedido de produção"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referência"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Breve descrição da produção (opcional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Selecionar peça para produção"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referência do pedido de venda"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Local de Origem"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Local de Destino"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Selecione o local onde os itens concluídos serão armazenados"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Quantidade de Produção"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Número de itens em estoque para produzir"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Itens concluídos"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Número de itens em estoque concluídos"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Progresso da produção"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Código de situação da produção"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Código de Lote"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Criado em"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Data alvo final"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Data de conclusão"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "Concluído por"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Emitido por"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Usuário que emitiu este pedido de produção"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsável"
-#: build/models.py:412
+#: build/models.py:419
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:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link Externo"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link para URL externa"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioridade de Produção"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioridade deste pedido de produção"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Código do projeto"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Código do projeto para este pedido de produção"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Falha ao descarregar tarefa para concluir alocações de construção"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "O Pedido de produção {build} foi concluído!"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Um pedido de produção foi concluído"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nenhuma saída de produção especificada"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Saída de produção já completada"
-#: build/models.py:1022
+#: build/models.py:960
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:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Quantidade deve ser maior que zero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Item da linha de Produção"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Objeto de produção"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Objeto de produção"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Quantidade"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Quantidade necessária para o pedido de produção"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Item estoque selecionado não coincide com linha da LDM"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Quantidade deve ser 1 para estoque serializado"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "O item do estoque está sobre-alocado"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Item de estoque"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Origem do item em estoque"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Quantidade do estoque para alocar à produção"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalar em"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destino do Item do Estoque"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nome da Peça"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Saída da Produção"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Saída de produção não coincide com a produção progenitora"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Peça de saída não coincide com a peça da ordem de produção"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Esta saída de produção já foi concluída"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "A saída de produção não está completamente alocada"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Entre a quantidade da saída de produção"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Quantidade inteira necessária para peças rastreáveis"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Números de Série"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Digite os números de série para saídas de produção"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Local de estoque para a produção"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Alocar Números de Série Automaticamente"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Os seguintes números de série já existem ou são inválidos"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Uma lista de saídas de produção deve ser fornecida"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Local de estoque para saídas recicladas"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Descartar alocações"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Motivo para sucatear saída(s) de produção"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Local para saídas de produção concluídas"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Aceitar Alocação Incompleta"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consumir Estoque Alocado"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Remover Saídas Incompletas"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Não permitido"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Aceitar conforme consumido por esta ordem de produção"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Desatribua antes de completar este pedido de produção"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Estoque sobrealocado"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Alguns itens de estoque foram sobrealocados"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Aceitar não alocados"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Estoque obrigatório não foi totalmente alocado"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Aceitar Incompleto"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Aceitar que o número requerido de saídas de produção não foi concluído"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Quantidade de produção requerida não foi concluída"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Pedido de produção tem saídas incompletas"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linha de produção"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Saída da Produção"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Saída de produção deve indicar a mesma produção"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Item da linha de produção"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bin_item.part deve indicar a mesma peça do pedido de produção"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Item deve estar em estoque"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Quantidade disponível ({q}) excedida"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Saída de produção deve ser definida para alocação de peças rastreadas"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Alocação do Item precisa ser fornecida"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Local não incluso"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Não incluir itens de estoque deste local"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Estoque permutável"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Itens de estoque em múltiplos locais pode ser permutável"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Substituir Estoque"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Permitir alocação de peças substitutas"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Itens opcionais"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Alocar itens LDM opcionais para o pedido de produção"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Fornecedor da Peça"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Quantidade Alocada"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Rastreável"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Permitir variações"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Item LDM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Em Produção"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Estoque Disponível"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Pendente"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produção"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Completado"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "O Pedido de produção {build} foi concluído!"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Um pedido de produção foi concluído"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Estoque obrigatório para o pedido de produção"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Pedido de produção vencido"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Pedido de produção {bo} está atrasada"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "É uma Ligação"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "É um arquivo"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "O Utilizador não tem permissão para remover este anexo"
@@ -1554,794 +1553,835 @@ msgstr "Sem extensão"
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Atualizado"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Tempo da última atualização"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Código único do projeto"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descrição do projeto"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valor da Configuração"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "Valor deve ser um valor booleano"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Valor deve ser um número inteiro"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Preço"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Ponto final"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Este gancho web está ativo"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token de acesso"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Segredo"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Segredo compartilhado para HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID da Mensagem"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identificador exclusivo desta mensagem"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Servidor"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Servidor do qual esta mensagem foi recebida"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Cabeçalho"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Cabeçalho da mensagem"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Corpo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Corpo da mensagem"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Ponto do qual esta mensagem foi recebida"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Trabalhado em"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "O trabalho desta mensagem foi concluído?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Título"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: 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:1758
msgid "Published"
msgstr "Publicado"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Resumo"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Lida"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Esta notícia do item foi lida?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Arquivo de imagem"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nome da unidade"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Símbolo"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Símbolo de unidade opcional"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definição"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definição de unidade"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Anexo"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Arquivo ausente"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Link externo não encontrado"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Selecione arquivo para anexar"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Comentario"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valor"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Criado"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Última atualização"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Modelo de parâmetro"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
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:2660
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:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Escolhas devem ser únicas"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Nome do modelo de parâmetro deve ser único"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Nome do Parâmetro"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unidades"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Unidades físicas para este parâmetro"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Descrição do Parâmetro"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Caixa de seleção"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Este parâmetro é uma caixa de seleção?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Escolhas"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Habilitado"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Dados"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Anotação"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Campo opcional de notas"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contexto"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultado"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Itens Recebidos"
@@ -2451,25 +2491,25 @@ msgstr "Argumentos de Palavra-chave"
msgid "Task keyword arguments"
msgstr "Argumentos Palavra-chave da Tarefa"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dias"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Atualizar Intervalo de Verificação"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Cópia de Segurança Automática"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervalo de Backup Automático"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervalo para Excluir da Tarefa"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervalo para Excluir do Registro de Erro"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervalo para Excluir de Notificação"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Suporte aos códigos de barras"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Atraso na entrada de código de barras"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Suporte a código de barras via Câmera"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revisões de peças"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Permitir a exclusão da Montagem"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "Regex IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Permitir Duplicação IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Permitir Edição IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copiar dados da LDM da Peça"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Copiar Dados de Parâmetro da Peça"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Copiar Dados Teste da Peça"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copiar Parâmetros dos Modelos de Categoria"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Peças são modelos por padrão"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Componente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Comprável"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Vendível"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtual"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Peças são virtuais por padrão"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Mostra peças relacionadas"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Dados Iniciais de Estoque"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Dados Iniciais de Fornecedor"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formato de Exibição do Nome da Peça"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Ícone de Categoria de Peça Padrão"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Mínimo de Casas Decimais do Preço"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Máximo Casas Decimais de Preço"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Usar Preços do Fornecedor"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Sobrescrever histórico de compra"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Usar Preços do Item em Estoque"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Idade do preço do Item em Estoque"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Usar Preço Variável"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Apenas Ativar Variáveis"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Intervalo de Reconstrução de Preços"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Preços Internos"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Habilitar preços internos para peças"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Sobrepor Valor Interno"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Ativar impressão de etiquetas"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI da Imagem na Etiqueta"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Habilitar Relatórios"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Ativar geração de relatórios"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Modo de depuração"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Relatório de erros"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Forçar Unidades de Parâmetro"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Seriais Únicos Globais"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Excluir Estoque Esgotado"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Modelo de Código de Lote"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Validade do Estoque"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Ativar função de validade de estoque"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vender estoque expirado"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Permitir venda de estoque expirado"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Tempo de Estoque Inativo"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Produzir Estoque Vencido"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Permitir produção com estoque vencido"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Controle de propriedade do estoque"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Ícone padrão do local de estoque"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Mostrar Itens de Estoque Instalados"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Verificar BOM ao instalar itens"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Permitir Transferência Fora do Estoque"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Produção"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Bloquear até os Testes serem Aprovados"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes sejam aprovados"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Ativar Pedidos de Devolução"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Devolução"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Editar os Pedidos de Devolução Concluídos"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Venda"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Envio Padrão de Pedidos de Venda"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Habilitar criação de envio padrão com Pedidos de Vendas"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Editar os Pedidos de Vendas concluídos"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Compras"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Editar Pedidos de Compra Concluídos"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Autocompletar Pedidos de Compra"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Habitar esquecer senha"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Habilitar cadastro"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Ativar SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Ativar SSO na página de acesso"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Ativar registro SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr ""
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email obrigatório"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Auto-preencher usuários SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Enviar email duplo"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Senha duas vezes"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Domínios permitidos"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupo no cadastro"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Forçar AMF"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Checar extensões no início"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Verificar por atualizações de plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Ativar integração URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Ativar extensão para adicionar rotas URL"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Ativar integração de navegação"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Ativar extensões para integrar à navegação"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Ativa integração com aplicativo"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Ativar extensões para adicionar aplicativos"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Ativar integração do calendário"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Ativar extensões para executar tarefas agendadas"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Ativar integração de eventos"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Excluir Locais Externos"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Período de Balanço Automático"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Mostrar nomes completos dos usuários"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Receber relatório de erros"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Receber notificações para erros do sistema"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Últimas máquinas de impressão utilizadas"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
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/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Um domínio vazio não é permitido."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nome de domínio inválido: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabricante"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Empresa"
@@ -4050,8 +4193,8 @@ msgstr "Número de telefone do contato"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contato"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Endereço"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Peça base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "NPF"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Número de Peça do Fabricante"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Fornecedor"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Unidade de reserva de estoque fornecedor"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "preço base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Embalagem"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "múltiplo"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Válido"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Desconhecido"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Referência do Pedido"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Criado por"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Pedido"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Peça Interna"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Concluído"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Devolver pedido"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Preço Total"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Preço total deste pedido"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Moeda do pedido"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "O contato não corresponde à empresa selecionada"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descrição do pedido (opcional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link para página externa"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Data alvo"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Data de emissão"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Dia que o pedido foi feito"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Usuário ou grupo responsável para este pedido"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Ponto de contato para este pedido"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Situação"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Situação do pedido de compra"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Empresa da qual os itens estão sendo encomendados"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Referencia do fornecedor"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Código de referência do pedido fornecedor"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "recebido por"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Dia que o pedido foi concluído"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destino"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Fornecedor de peça deve corresponder a fornecedor da OC"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "O item de linha não corresponde ao pedido de compra"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Quantidade deve ser um número positivo"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Empresa para qual os itens foi vendidos"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Referência do Cliente "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Data de Envio"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "enviado por"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Quantidade do item"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Referência do Item em Linha"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Observações do Item de Linha"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descrição item de linha (opcional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contexto adicional para esta linha"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Preço Unitário"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "A peça do fornecedor deve corresponder ao fornecedor"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Fornecedor da Peça"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Recebido"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Preço de Compra"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Preço unitário de compra"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Preço de Venda"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Preço de venda unitário"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Enviado"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Quantidade enviada"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Data do envio"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Data de Entrega"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Data da entrega do envio"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Verificado por"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Remessa"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Número do Envio"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Número de Rastreamento"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informação de rastreamento da remessa"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Número da Fatura"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Número de referência para fatura associada"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "O pedido já foi enviado"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Remessa não foi alocada nos itens de estoque"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "O item do estoque não foi atribuído"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Linha"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Selecione o item de estoque para alocar"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Insira a quantidade de atribuição de estoque"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Referência de Pedidos de Devolução"
-#: order/models.py:2777
+#: order/models.py:2847
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:2860
msgid "Return order status"
msgstr "Estado do pedido de retorno"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Selecione o item a ser devolvido pelo cliente"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Data de Recebimento"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Despesa/gastos"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Gastos com esta linha de itens"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Copiar Parâmetros"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Itens de linha"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Nome do Fornecedor"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Pedido não pode ser cancelado"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "O pedido tem itens da linha incompletos"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "O pedido não está aberto"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Moeda de preço de compra"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Código (SKU)"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Numero interno do produto"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "A peça do fornecedor deve ser especificada"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "O pedido de compra deve ser especificado"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "O fornecedor deve corresponder o pedido de compra"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Itens de linha"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Selecione o local de destino para os itens recebidos"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: 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:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
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:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Código de barras"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Código de barras lido"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Itens de linha deve ser providenciados"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Loca de destino deve ser especificado"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Código de barras fornecido deve ser único"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Envios concluídos"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Moeda de preço de venda"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Nenhum detalhe da remessa fornecido"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Quantidade deve ser positiva"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "O pedido já foi enviado"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
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:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Devolver item do pedido"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "Item do pedido já foi recebido"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Tipo de moeda para o item do pedido"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perdido"
@@ -5661,6 +5879,11 @@ msgstr "Reembolsar"
msgid "Reject"
msgstr "Recusar"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Emitido"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Pedido de compra vencido"
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Categoria da Peça"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Local Padrão"
msgid "Default location for parts in this category"
msgstr "Local padrão para peças desta categoria"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Estrutural"
@@ -5837,12 +6064,12 @@ msgstr "Palavras-chave Padrão"
msgid "Default keywords for parts in this category"
msgstr "Palavras-chave padrão para peças nesta categoria"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ícone"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ícone (opcional)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Venda múltipla"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Moeda usada para armazenar os cálculos de preços"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Custo Mínimo da LDM"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Custo mínimo das peças componentes"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Custo Máximo da LDM"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Custo máximo das peças componentes"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Custo Mínimo de Compra"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Custo mínimo histórico de compra"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Custo Máximo de Compra"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Custo máximo histórico de compra"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Preço Interno Mínimo"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Custo mínimo baseado nos intervalos de preço internos"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Preço Interno Máximo"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Custo máximo baseado nos intervalos de preço internos"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Preço Mínimo do Fornecedor"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Preço mínimo da peça de fornecedores externos"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Preço Máximo do Fornecedor"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Preço máximo da peça de fornecedores externos"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Custo Mínimo variável"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Custo mínimo calculado das peças variáveis"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Custo Máximo Variável"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Custo máximo calculado das peças variáveis"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Custo Mínimo"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Sobrepor o custo mínimo"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Custo Máximo"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Sobrepor o custo máximo"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Custo total mínimo calculado"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Custo total máximo calculado"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Preço Mínimo de Venda"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Preço mínimo de venda baseado nos intervalos de preço"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Preço Máximo de Venda"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Preço máximo de venda baseado nos intervalos de preço"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Custo Mínimo de Venda"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Preço histórico mínimo de venda"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Custo Máximo de Venda"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Preço histórico máximo de venda"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Peça para Balanço"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Total de Itens"
-#: part/models.py:3468
+#: part/models.py:3532
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:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Estoque total disponível no momento do balanço"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Data"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Data de realização do balanço"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Custo Mínimo de Estoque"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Custo mínimo estimado de estoque disponível"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Custo Máximo de Estoque"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Custo máximo estimado de estoque disponível"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Nome de Teste"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Insira um nome para o teste"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Descrição do Teste"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Digite a descrição para este teste"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Requerido"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Este teste é obrigatório passar?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Requer Valor"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Anexo obrigatório"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Selecione a Peça Parental"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sub peça"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Selecionar peça a ser usada na LDM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Quantidade de LDM para este item LDM"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Este item LDM é opcional"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Referência do Item LDM"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Notas do Item LDM"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Soma de verificação"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Soma de Verificação da LDM da linha"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Validado"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "O item da LDM foi validado"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Obtém herdados"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Quantidade deve ser valor inteiro para peças rastreáveis"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Sub peça deve ser especificada"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Substituir Item da LDM"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Item LDM Parental"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Substituir peça"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Parte 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Parte 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Selecionar Peça Relacionada"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Relação duplicada já existe"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Categoria de peça pai"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Sub-categorias"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Moeda de compra deste item de estoque"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Peça Original"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Selecione a peça original para duplicar"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Copiar imagem"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Copiar imagem da peça original"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Copiar LDM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Copiar lista de materiais da peça original"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Copiar dados do parâmetro da peça original"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Copiar Notas"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Copiar imagem da peça original"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Quantidade Inicial de Estoque"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Local Inicial do Estoque"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Especifique o local do estoque inicial para esta Peça"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Selecione fabricante (ou deixe em branco para pular)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Número de Peça do Fabricante"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
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:555
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:840
msgid "Category Name"
msgstr "Nome da Categoria"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Produzindo"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Itens de Estoque"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Peça duplicada"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Copiar dados iniciais de outra peça"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Estoque inicial"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Criar peça com a quantidade inicial de estoque"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Informações do Fornecedor"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Copiar Parâmetros da Categoria"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Imagem Existente"
-#: part/serializers.py:999
+#: part/serializers.py:1027
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:1044
msgid "Image file does not exist"
msgstr "A imagem não existe"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Validar a Lista de Materiais completa"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Pode Produzir"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Preço Mínimo"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Sobrepor valor calculado para preço mínimo"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Moeda do preço mínimo"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Preço Máximo"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Sobrepor valor calculado para preço máximo"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Moeda do preço máximo"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Atualizar"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Atualizar preços desta peça"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Selecionar peça para copiar a LDM"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Remover Dado Existente"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Remova itens LDM existentes antes de copiar"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Incluir Herdados"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Pular Linhas inválidas"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Copiar Peças Substitutas"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Copiar peças de substitutas quando duplicar itens de LDM"
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Extensões"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nenhum autor encontrado"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Materiais necessários"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Imagem da peça"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Emitido"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Necessário para"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Número de Sério"
@@ -8292,7 +8560,7 @@ msgstr "Relatório Teste do Item em Estoque"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Itens instalados"
@@ -8325,6 +8593,10 @@ msgstr "Sem resultado (obrigatório)"
msgid "No result"
msgstr "Nenhum resultado"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "Tag part_image necessita de uma instância de Peça"
msgid "company_image tag requires a Company instance"
msgstr "Tag company_image necessita de uma instância de Empresa"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Código da situação"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Localização externa"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Árvore de Peças"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Data de validade antes"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Data de validade depois"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Inativo"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Quantidade obrigatória"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Uma peça válida deve ser fornecida"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "A peça do fornecedor informado não existe"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "A peça do fornecedor tem um tamanho de pacote definido, mas o item use_pack_size não foi definida"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Números de série não podem ser fornecidos para uma parte não rastreável"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Tipo de Local de estoque"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Tipos de Locais de estoque"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Localização do estoque"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Locais de estoque"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Responsavel"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Selecionar Responsável"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Externo"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Esta é uma localização de estoque externo"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Tipo de localização"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Tipo de Local de Estoque para esta locação"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "O item não pode pertencer a si mesmo"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Item de Estoque Parental"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Peça base"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Embalagem deste item de estoque está armazenado em"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Instalado em"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Este item está instalado em outro item?"
-#: stock/models.py:1094
+#: stock/models.py:1119
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:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Código do lote para este item de estoque"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Quantidade de Estoque"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Produção de Origem"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Produção para este item de estoque"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Consumido por"
-#: stock/models.py:1139
+#: stock/models.py:1164
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:1173
msgid "Source Purchase Order"
msgstr "Pedido de compra Fonte"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Pedido de Compra para este item de estoque"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Destino do Pedido de Venda"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Excluir quando esgotado"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Convertido para peça"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Peça não está definida como rastreável"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Quantidade deve ser inteira"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
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:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
msgid "Stock item is installed in another item"
msgstr "Item em estoque está instalado em outro item"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "item em estoque contem outro(s) items"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Item no estoque está em produção no momento"
-#: stock/models.py:2087
+#: stock/models.py:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Item de estoque duplicado"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Códigos de estado do estoque devem corresponder"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Observações de entrada"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Deve-se fornecer o valor desse teste"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "O anexo deve ser enviado para este teste"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Resultado do teste"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Valor da saída do teste"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Anexo do resultado do teste"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Notas do teste"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr "Usar tamanho do pacote ao adicionar: a quantidade definida é o número
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Inserir número de série para novos itens"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Expirado"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Itens Filhos"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Preço de compra para este item de estoque, por unidade ou pacote"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Insira o número de itens de estoque para serializar"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Local de destino do estoque"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Números de série não podem ser atribuídos a esta peça"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Números de série já existem"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Selecione o item de estoque para instalar"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Quantidade a Instalar"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Insira a quantidade de itens a instalar"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Adicionar nota de transação (opcional)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "A quantidade para instalar deve ser pelo menos 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Item de estoque indisponível"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Peça selecionada não está na Lista de Materiais"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Quantidade a instalar não deve exceder a quantidade disponível"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Local de destino para o item desinstalado"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Selecione peça para converter o item de estoque em"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Peça selecionada não é uma opção válida para conversão"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Não é possível converter o item de estoque com a Peça de Fornecedor atribuída"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Código de estado do item estoque"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Selecionar itens de estoque para mudar estados"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Nenhum item de estoque selecionado"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Sub-locais"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Parte deve ser comercializável"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Item é alocado para um pedido de venda"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Item está alocado a um pedido de produção"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Cliente para atribuir itens de estoque"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "A empresa selecionada não é um cliente"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Nodas atribuídas a estoque"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Uma lista de item de estoque deve ser providenciada"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Notas de fusão de estoque"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Permitir fornecedores divergentes"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Permitir estado incompatível"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Permitir a fusão de itens de estoque com estado diferentes"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Ao menos dois itens de estoque devem ser providenciados"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Valor da chave primária do Item Estoque"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Notas da transação de estoque"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Administrador"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Pedidos de compra"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Pedidos de vendas"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Pedidos de Devolução"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nome de usuário"
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 473a4394de..694eb74dbd 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Não foi possível converter {original} para {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Quantidade inválida"
@@ -104,13 +105,13 @@ msgstr "Informe a data"
msgid "Invalid decimal value"
msgstr "Valor decimal inválido"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Observações"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descrição"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descrição (opcional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Moeda"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Situação de pedido"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Produção Progenitora"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Incluir Variáveis"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Incluir Variáveis"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Incluir Variáveis"
msgid "Part"
msgstr "Parte"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categoria"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Atribuído a mim"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Data Mínima"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Data máxima"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Excluir árvore"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumível"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opcional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montagem"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Rastreado"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testável"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Pedido pendente"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Alocado"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Em pedido"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Ordem da compilação"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Local"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Saída"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Ordens de Produções"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "O BOM da montagem não foi validado"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Ordem de compilação não pode ser criada para uma parte inativa"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Ordem de compilação não pode ser criado para uma parte desbloqueada"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Criar ordens só pode ser realizado externamente para partes compráveis"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Usuário ou grupo responsável deve ser especificado"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Parte do pedido de compilação não pode ser alterada"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "A data limite deve ser posterior à data inicial"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referência do pedido de produção"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referência"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Breve descrição da produção (opcional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Selecione a peça para construir"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referência do pedido de venda"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Local de Origem"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Selecione o local para fazer estoque para esta compilação (deixe em branco para tirar a partir de qualquer local de estoque)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Produção Externa"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Esta ordem de compilação é atendida externamente"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Local de Destino"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Selecione o local onde os itens concluídos serão armazenados"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Quantidade de Produção"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Número de itens em estoque para produzir"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Itens concluídos"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Número de itens em estoque concluídos"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Progresso da produção"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Código de situação da produção"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Código do lote"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Criado em"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Data inicial da produção"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Data de início agendada para esta ordem de produção"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Data alvo final"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Data de conclusão"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "concluído por"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Emitido por"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Usuário que emitiu esta ordem de produção"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsável"
-#: build/models.py:412
+#: build/models.py:419
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:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link Externo"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link para URL externa"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioridade de Produção"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioridade desta ordem de compilação"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Código do Projeto"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Código do projeto para esta ordem de compilação"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Não é possível concluir o pedido de produção com pedidos secundários abertos"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Não é possível concluir o pedido com saídas incompletas"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Falha ao descarregar tarefa para concluir alocações de compilação"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "O Pedido de produção {build} foi concluído"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Um pedido de produção foi concluído"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nenhuma saída de produção especificada"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Saída da produção já está concluída"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Saída da produção não corresponde à Ordem de Produção"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Quantidade deve ser maior que zero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
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:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Item da ordem de produção"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Compilar objeto"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Compilar objeto"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Quantidade"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Quantidade necessária para o pedido de produção"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Quantidade deve ser 1 para estoque serializado"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "O item do estoque está sobre-alocado"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Item de Estoque"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Origem do item em estoque"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Quantidade do estoque para alocar à produção"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalar em"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destino do Item do Estoque"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Nível de produção"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Nome da Peça"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Saída da Produção"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Saída de produção não coincide com a produção progenitora"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Peça de saída não coincide com a peça da ordem de produção"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Esta saída de produção já foi concluída"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Esta saída de produção não está totalmente alocada"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Insira a quantidade para construir a saída de produção"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Quantidade inteira necessária para peças rastreáveis"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Números de Série"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Digite os números de série para saídas de produção"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Local de estoque para saídas de produção"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Alocar Números de Série Automaticamente"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Os seguintes números de série já existem ou são inválidos"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Uma lista de saídas de produção deve ser fornecida"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Local de estoque para saídas eliminadas"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Descartar alocações"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Motivo para eliminar saída(s) de produção"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Local para saídas de produção concluídas"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Aceitar Alocação Incompleta"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Consumir Estoque Alocado"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Remover Saídas Incompletas"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Não permitido"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Aceitar conforme consumido por esta ordem de produção"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Desatribua antes de completar esta ordem de produção"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Alguns itens de estoque foram sobrecarregados"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Aceitar não alocados"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta encomenda"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Estoque obrigatório não foi totalmente alocado"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Aceitar Incompleto"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Aceitar que o número requerido de saídas de produção não foi concluído"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Quantidade de produção requerida não foi concluída"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "A ordem de produção tem ordens de produção secundárias abertas"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Ordem de produção deve estar no estado de produção"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Ordem de produção tem saídas incompletas"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linha de Produção"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Saída da Produção"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Saída de produção deve indicar a mesma produção"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Item da linha de produção"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "O item deve estar em estoque"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Quantidade disponível ({q}) excedida"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Saída de produção deve ser definida para alocação de peças rastreadas"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Alocação de itens precisam ser fornecidos"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Localização do estoque onde as peças devem ser originadas (deixe em branco a partir de qualquer local)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Excluir Local"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Excluir itens de estoque desta localização selecionada"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Estoque Intercambiável"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Itens de estoque em múltiplos locais podem ser intercambiáveis"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Estoque Substituto"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Permitir alocação de peças substitutas"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Itens opcionais"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Alocar itens BOM opcionais para ordem de produção"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Referência do BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID da parte BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nome da peça BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Produção"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Fornecedor da Peça"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Quantidade Alocada"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Referência da produção"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nome da Categoria"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Rastreável"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Herdado"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Permitir variantes"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Item BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Em Produção"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Agendado para produção"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Estoque Externo"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Estoque Disponível"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Estoque Substituto Disponível"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Estoque de Variantes Disponível"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Pendentes"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produção"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Em Espera"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Cancelado"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Concluído"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "O Pedido de produção {build} foi concluído"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Um pedido de produção foi concluído"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Estoque obrigatório para a ordem de produção"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Ordem de produção {build} requer estoque adicional"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Ordem de produção vencido"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Ordem de produção {bo} está atrasada"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "É um link"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "É um arquivo"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "O usuário não tem permissão para deletar esse anexo"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Atualizado"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Tempo da última atualização"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Atualizado Por"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Usuário que atualizou este objeto pela última vez"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Código único do projeto"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descrição do projeto"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Chave de configurações"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Valor da Configuração"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "Valor deve ser um valor booleano"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Valor deve ser um número inteiro"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "O valor deve ser um número válido"
-#: common/models.py:900
+#: common/models.py:906
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:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Preço"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Ponto final"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Ponto final em qual o webhook foi recebido"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Este webhook está ativo"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Ficha"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Ficha para acesso"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Secreto"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Segredo compartilhado para HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID da Mensagem"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Identificador exclusivo desta mensagem"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Servidor"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Servidor do qual esta mensagem foi recebida"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Cabeçalho"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Cabeçalho da mensagem"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Corpo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Corpo da mensagem"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Ponto do qual esta mensagem foi recebida"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Trabalhado em"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "O trabalho desta mensagem foi concluído?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Título"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publicado"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Resumo"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Lida"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Esta notícia do item foi lida?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Arquivo de imagem"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Tipo modelo de destino para esta imagem"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "ID do modelo de destino para esta imagem"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unidade Personalizada"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "O símbolo da unidade deve ser único"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Nome da unidade"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Símbolo"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Símbolo de unidade opcional"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definição"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definição de unidade"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Anexo"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Arquivo ausente"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Link externo não encontrado"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Categoria de Modelo"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Tipo modelo de destino para esta imagem"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Selecione arquivo para anexar"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Comentário"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Comentário de anexo"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Data de envio"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Data em que o arquivo foi enviado"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Tamanho do arquivo"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Tamanho do arquivo em bytes"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Categoria de modelo especificado inválido para anexo"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Estado personalizado"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Estados personalizados"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Status Referência Definido"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Chave lógica"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Valor"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
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:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiqueta"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Cor"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Cor que será exibida no frontend"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modelo"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Modelo que este estado está associado a"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Modelo deve ser selecionado"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "A chave deve ser selecionada"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Chave lógica deve ser selecionada"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "A chave deve diferir da chave lógica"
-#: common/models.py:2186
+#: common/models.py:2362
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:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Lista de Seleção"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Listas de Seleção"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Nome da lista de seleção"
-#: common/models.py:2259
+#: common/models.py:2435
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:2441 part/models.py:1297
msgid "Locked"
msgstr "Bloqueado"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Esta lista de seleção está bloqueada?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Esta lista de seleção pode ser usada?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Extensão de origem"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Extensão que fornece a lista de seleção"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Série de Origem"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Entrada Padrão"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Criado em"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Última Atualização"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Entrada na lista de seleção"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Entradas na Lista de Seleção"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Lista de seleção à qual esta entrada pertence"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Valor da entrada da lista de seleção"
-#: common/models.py:2394
+#: common/models.py:2570
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:2576
msgid "Description of the selection list entry"
msgstr "Descrição da entrada da lista de seleção"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Esta entrada da lista de seleção está ativa?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Nome do Parâmetro"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Unidades"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Caixa de seleção"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Habilitado"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Dados"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Anotação"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Campo opcional de notas"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Escaneamento de Código de Barras"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Dados de código de barras"
-#: common/models.py:2858
+#: common/models.py:3034
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:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Marcador de hora"
-#: common/models.py:2864
+#: common/models.py:3040
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:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Contexto"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Dados de contexto para escanear código de barras"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Resposta"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultado"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "O código de barras foi digitalizado com sucesso?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Ocorreu um erro"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "Mensagem de e-mail"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "Mensagens de Email"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Anunciado"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Enviado"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Falhou"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Entregue"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Confirmado"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Entrada"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Saída"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Não responder"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Rastrear Entrega"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Monitorado"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Clique no caminho"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "ID Global"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "ID do Tópico"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Tópico"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Tópico vinculado para esta mensagem"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Tópico do e-mail"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Tópicos de e-mail"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Identificador exclusivo deste tópico"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Iniciado interno"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Este tópico foi iniciado internamente?"
-#: common/models.py:3200
+#: common/models.py:3376
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:3381
msgid "Date and time that the thread was last updated"
msgstr "Data e hora da última atualização do tópico"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Itens Recebidos"
@@ -2451,25 +2491,25 @@ msgstr "Argumentos de Palavra-chave"
msgid "Task keyword arguments"
msgstr "Argumentos Palavra-chave da Tarefa"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Categoria de Modelo"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista de seleção bloqueada"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dias"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Atualizar Intervalo de Verificação"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Backup Automático"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Intervalo de Backup Automático"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Intervalo para Excluir da Tarefa"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Intervalo para Excluir do Registro de Erro"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Intervalo para Excluir de Notificação"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "Intervalo de Exclusão de e-mail"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "Proteger o Log de E-mail"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
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:363
msgid "Barcode Support"
msgstr "Suporte aos códigos de barras"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Armazenar Resultados do Código de Barras"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Contagem máxima de códigos de barras"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Atraso na entrada de código de barras"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Suporte a webcam com código de barras"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Código de barras Exibir Dados"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Extensão de geração de códio de barras"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revisões de peças"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr "Somente Revisão da Assembleia"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
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:424
msgid "Allow Deletion from Assembly"
msgstr "Permitir a exclusão da Assembleia"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "Regex IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Permitir Duplicação IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Permitir Edição IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Copiar dados da LDM da Peça"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Copiar Dados de Parâmetro da Peça"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Copiar Dados Teste da Peça"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Copiar Parâmetros dos Modelos de Categoria"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Peças são modelos por padrão"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Componente"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Comprável"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Comercializável"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtual"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Peças são virtuais por padrão"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Mostrar peças relacionadas"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Dados Iniciais de Estoque"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Dados Iniciais de Fornecedor"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Formato de Exibição do Nome da Peça"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Ícone de Categoria de Peça Padrão"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Mínimo de Casas Decimais do Preço"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Máximo Casas Decimais de Preço"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Usar Preços do Fornecedor"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Substituir Histórico de Compras"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Usar Preços do Item em Estoque"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Idade do preço do Item em Estoque"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Usar Preço Variável"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Apenas Ativar Variáveis"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Atualização automática dos preços"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Intervalo de Reconstrução de Preços"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Preços Internos"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Habilitar preços internos para peças"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Substituição de preço interno"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Habilitar Impressão de Etiqueta"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI da Imagem na Etiqueta"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Ativar Relatórios"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Ativar geração de relatórios"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Modo de depuração"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Registro de erros"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Forçar Unidades de Parâmetro"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Seriais Únicos Globais"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Excluir Estoque Esgotado"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Modelo de Código de Lote"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Validade do Estoque"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Ativar função de validade de estoque"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Vender estoque expirado"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Permitir venda de estoque expirado"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Tempo de Estoque Inativo"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Produzir Estoque Vencido"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Permitir produção com estoque vencido"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Controle de propriedade do estoque"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Ícone padrão do local de estoque"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Mostrar Itens de Estoque Instalados"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Verificar LDM ao instalar itens"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Permitir Fora de Transferência"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Produção"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Requer Parte Ativa"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Exigir parte bloqueada"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Exigir validade, BOM"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Exigir pedidos secundários fechados"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Pedido de Produção Externo"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Ativar funcionalidade de pedido de construção externa"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Bloquear Até Passagem de Testes"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes necessários passem"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Ativar Pedidos de Devolução"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Ativar funcionalidade de pedido de devolução na interface do usuário"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Devolução"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Modelo necessário para gerar campo de referência do Pedido de Devolução"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Editar os Pedidos de Devolução Concluídos"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Venda"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Envio Padrão de Pedidos de Venda"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Habilitar criação de envio padrão com Pedidos de Vendas"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Editar os Pedidos de Vendas concluídos"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Marcar pedidos enviados como concluídos"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Pedidos de vendas marcados como enviados automaticamente serão concluídos, ignorando o status \"enviado\""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Modelo de Referência de Pedidos de Compras"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Editar Pedidos de Compra Concluídos"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Converter Moeda"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Completar automaticamente os pedidos de Compra"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Ativar senha esquecida"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Ativar cadastro"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Ativar SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Ativar SSO na página de acesso"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Ativar registro SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Ativar sincronização de grupo SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "Chave de grupo SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Mapa do grupo SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Remover grupos fora do SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email obrigatório"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Auto-preencher usuários SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Enviar email duplo"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Senha duas vezes"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Domínios permitidos"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupo no cadastro"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Forçar AMF"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Verificar extensões na inicialização"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Verificar por atualizações de extensão"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Ativar integração URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Ativar extensão para adicionar rotas URL"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Ativar integração de navegação"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Ativar extensões para integrar à navegação"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Ativar integração com aplicativo"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Ativar extensões para adicionar aplicativos"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Ativar integração com agendas"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Ativar extensões para executar tarefas agendadas"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Ativar integração de eventos"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Ativar integração de interface"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Ativar integração com o e-mail"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Ativar códigos de projeto"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Excluir Locais Externos"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Período de contagem automática"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Exibir nomes completos dos usuários"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Exibir Perfis de Usuário"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Ativar Dados da Estação de Teste"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Desativado: O caminho completo da categoria é exibido como uma dica do mouse. Habilitado: O caminho completo da categoria é exibido como texto sem formatação."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Receber relatório de erros"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Receber notificações para erros do sistema"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Últimas máquinas de impressão utilizadas"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
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/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Todos os modelos"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Nenhum modelo de anexo fornecido"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Categoria de modelo de anexo inválido"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Os lugares mínimos não podem ser maiores que os máximos"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Os lugares maiores não podem ser menores que os máximos"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Um domínio vazio não é permitido."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nome de domínio inválido: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Valor deve ser maiúsculo"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "O valor deve ser um identificador de variável válido"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Fabricante"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Empresa"
@@ -4050,8 +4193,8 @@ msgstr "Número de telefone do contato"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Contato"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Endereço"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Peça base"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "NPF"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Número de Peça do Fabricante"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Fornecedor"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Unidade de reserva de estoque fornecedor"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "preço base"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Embalagem"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "múltiplo"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Válido"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Desconhecido"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Referência do Pedido"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Pendente"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Tem código do projeto"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Criado por"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Criado Antes"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Criado Após"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Tem Data Inicial"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Data Inicial Antes"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Data Inicial Após"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Tem Data Prevista"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Data Prevista Antes"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Data Prevista Antes"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Tem Preço"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Concluído Antes"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Concluído Após"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Pedido"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Pedido Completo"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Peça Interna"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Pedido pendente"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Concluído"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Possui Envio"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Pedido de Devolução"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Preço Total"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Preço total deste pedido"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Moeda do Pedido"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Este pedido está bloqueado e não pode ser modificado"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "O contato não corresponde à empresa selecionada"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Data inicial deve ser anterior à data limite"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descrição do pedido (opcional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link para página externa"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Data inicial"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Data Prevista"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Data de emissão"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Dia que o pedido foi feito"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Usuário ou grupo responsável para este pedido"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Ponto de contato para este pedido"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Situação"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Estado do pedido"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Empresa da qual os itens estão sendo encomendados"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Referencia do fornecedor"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Código de referência do pedido fornecedor"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "recebido por"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Dia que o pedido foi concluído"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Destino"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Destino para os itens recebidos"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Fornecedor de peça deve corresponder a fornecedor da OC"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Quantidade deve ser um número positivo"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Empresa para qual os itens foi vendidos"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Situação do Pedido de Venda"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Referência do Cliente "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Data de envio"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "enviado por"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "O pedido já está completo"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "O pedido já está cancelado"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Quantidade do item"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Referência do Item em Linha"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Observações do Item de Linha"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descrição do item de linha (opcional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Contexto adicional para esta linha"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Preço Unitário"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Item de linha de pedido de compra"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "A peça do fornecedor deve corresponder ao fornecedor"
-#: order/models.py:1944
+#: order/models.py:2003
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:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Fornecedor da Peça"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Recebido"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Preço de Compra"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Preço unitário de compra"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Linha Extra do Pedido de Compra"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Item de Linha de Pedido de Vendas"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Preço de Venda"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Preço de venda unitário"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Enviado"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Quantidade enviada"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Envio do Pedido de Venda"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Data do envio"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Data de Entrega"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Data da entrega do envio"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Verificado por"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Envio"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Número do Envio"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Número de rastreio"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informação de rastreamento"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Linha"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Item"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Copiar linhas"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Duplicar Pedido"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "ID do pedido inválido"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "O pedido não pode ser cancelado"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Mesclar Itens"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Código (SKU)"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Número Interno da Peça"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Nome Interno da Peça"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Código de barras"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Código de barras lido"
-#: order/serializers.py:920
+#: order/serializers.py:922
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:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Itens Alocados"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
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:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Perdido"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr "Rejeitado"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Categoria da Peça"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Local Padrão"
msgid "Default location for parts in this category"
msgstr "Local padrão para peças desta categoria"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr "Palavras-chave Padrão"
msgid "Default keywords for parts in this category"
msgstr "Palavras-chave padrão para peças nesta categoria"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ícone"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ícone (opcional)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Data"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Obrigatório"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr "Sub peça"
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr "Sub peça"
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Itens de Estoque"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Estoque Inicial"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Atualizar"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "Ignorar Linhas Inválidas"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Estoque mínimo"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Estoque máximo"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Responsável"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Selecionar Responsável"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nome de usuário"
diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po
index b92125d40b..0cab53d21b 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Language: ro_RO\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Nu s-a putut converti {original} în {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Cantitate furnizata nevalida"
@@ -104,13 +105,13 @@ msgstr "Enter Date"
msgid "Invalid decimal value"
msgstr "Valoare zecimală nevalidă"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notițe"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Descriere"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Descriere (opțional)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Monedă"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Starea comenzii"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Construcție părinte"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "İnclude variante"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "İnclude variante"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "İnclude variante"
msgid "Part"
msgstr "Piesă"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Categorie"
@@ -605,7 +593,7 @@ msgstr "Categorie"
msgid "Ancestor Build"
msgstr "Ancestor Build"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Alocate mie"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "Dată min"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Dată maximă"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Exclude arbore"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Consumabile"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opţional"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Asamblate"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Urmarit"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testabilă"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Comandă restantă"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Alocate"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Consumat"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Pe comandă"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Comenzi de Producție"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Locatie"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Ieșire"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Filtrează după ID-ul elementelor de ieșire din stoc. Utilizați \"null\" pentru a găsi elemente de construcție dezinstalate."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Comenzi de Producție"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "BOM-ul nu a fost validată"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Comandă de producție nu poate fi creată pentru piesa inactiva"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Comandă de producție nu poate fi creată pentru piesa deblocată"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Comenzile de producție pot fi îndeplinite extern doar pentru piesele achiziționabile"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Utilizator sau grup responsabil trebuie specificat"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Piesa din comanda de producție nu poate fi schimbata"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Data țintă trebuie să fie după data de început"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referință comandă producție"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referinţă"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Scurtă descriere a construcției (opțional)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Comanda de producție pentru care această construcție este alocată"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Selectează piesa pentru construit"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referință comandă de vânzare"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Comanda de vânzare pentru care această construcție este alocată"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Locație sursă"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Selectați locația de unde se va prelua stocul pentru această producție (lăsați câmpul necompletat pentru a prelua stocul din orice locație)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Construcție externă"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Această comandă de producție este îndeplinită extern"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Locul destinației"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Selectaţi locaţia unde vor fi stocate elementele complete"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Cantitatea construirii"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Numărul de articole de stoc pentru producție"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Articole finalizate"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Numărul de articole din stoc care au fost finalizate"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Stare producției"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Cod status producție"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Cod lot"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Data creării"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Data începerii construcției"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Data de început programată pentru această comandă de construcție"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Data finalizării țintă"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Data completării"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "finalizat până la"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Emis de"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Utilizatorul care a emis această comandă de producție"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Responsabil"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Link extern"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link către URL-ul extern"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioritate de construire"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioritatea acestei comenzi de producție"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Cod proiect"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Cod de proiect pentru această comandă de construcție"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Nu se poate finaliza construcția comenzii cu versiuni deschise"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Nu se poate completa comanda de producție cu rezultate incomplete"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Nu s-a putut descărca sarcina pentru a finaliza alocarea construcției"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "A fost finalizată o comandă de producție {build}"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "A fost finalizată o comandă de producție"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nu este specificată nicio ieșire de producție"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Construcția este deja finalizată"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Construcția nu se potrivește cu Comanda de producție"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Cantitatea trebuie să fie mai mare decât zero"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "Construcția nu a trecut toate testele necesare"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Stocurile alocate sunt încă în producţie"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Element linie comandă de producție"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Construiește obiectul"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Construiește obiectul"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Cantitate"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Cantitatea necesară pentru comanda de producție"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Cantitatea de stoc consumată"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "Cantitatea alocată trebuie să fie mai mare decât zero"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Articolul din stoc este supra alocat"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Articol Stoc"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Locație articol stoc"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Cantitatea de stoc alocată pentru construcție"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Instalează în"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destinație articol in stoc"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Nivel de construcție"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Numele Piesei"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Rezultat de construcție"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Producția nu corespunde cu producția-mamă"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Această producție este deja finalizată"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Această producție nu este alocată integral"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Introduceți cantitatea pentru producția de ieșire"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Număr de serie"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Nu este permisă"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Acceptați nealocat"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Acceptați Incomplet"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Linie de construcție"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Rezultatul construirii"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Locația stocului de unde vor fi procurate piesele (lăsați necompletat pentru a prelua piesele din orice locație)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Nume piesă BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Producție"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Nume Categorie Piesă"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "În Producţie"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Stoc extern"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Stoc disponibil"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Stoc de înlocuire disponibil"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "În așteptare"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Producție"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Suspendat"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Anulat"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Finalizat"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "A fost finalizată o comandă de producție {build}"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "A fost finalizată o comandă de producție"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Comandă de producție restantă"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Comanda de producție {bo} este în întârziere"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr "Etichetă Cod Proiect"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Descrierea proiectului"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Valoarea nu trece verificările de validare"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Preț"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Preț unitar la cantitatea specificată"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Punct final"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Punctul final la care acest webhook este primit"
-#: common/models.py:1439
+#: common/models.py:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Este acest webhook activ"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token-ul"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token pentru acces"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Secret"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Host"
-#: common/models.py:1587
+#: common/models.py:1593
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:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id-ul"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titlu"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Publicată"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Rezumat"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Citit"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "A fost citită această știre?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Fișier imagine"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Unitate personalizată"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Numele unității"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Comentariu"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Comentariu atașament"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Data încărcării"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "Numele statului"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Descrierea listei de selecție"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Descrierea parametrului"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Versiune Componente"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Șablon Cod lot"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr ""
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr ""
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "Comenzi externe de producție"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blochează până la trecerea testelor"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Previne ca ieșirile de construcție să fie finalizate până când toate testele necesare trec"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
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"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr "Activează parola uitată"
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
-msgstr "Activare parolă uitată funcție pe paginile de autentificare"
-
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
-msgstr ""
+#: common/setting/system.py:986
+msgid "Enable password forgot"
+msgstr "Activează parola uitată"
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr "Activare parolă uitată funcție pe paginile de autentificare"
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
-#: common/setting/system.py:1019
-msgid "Password twice"
-msgstr "Parola de două ori"
-
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
-msgstr "La înscriere, cere de două ori parola lor"
-
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1035
-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."
+#: common/setting/system.py:1028
+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:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
+msgstr ""
+
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
msgstr ""
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
+msgstr "Parola de două ori"
+
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
-msgstr ""
+msgid "On signup ask users twice for their password"
+msgstr "La înscriere, cere de două ori parola lor"
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr "Descrierea piesei furnizorului"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Id comandă"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Descrierea comenzii (opțional)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Descrierea elementului de rând (opțional)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Este versiune"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Are Versiuni"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Descriere test"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Introduceți descrierea pentru acest test"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Este necesar acest test pentru a trece?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Versiunea"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "Descrierea piesei"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Proprietar"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Codul lotului pentru acest element din stoc"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Nume utilizator"
diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po
index 8073b73f0f..d22fbc4382 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Невозможно преобразовать {original} в {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "недопустимое количество"
@@ -104,13 +105,13 @@ msgstr "Введите дату"
msgid "Invalid decimal value"
msgstr "Не верное десятичное значение"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Заметки"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Описание"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Описание (необязательно)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "Должно быть действительным номером"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Валюта"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Статус заказа"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Родительский заказ на производство"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Включая варианты"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Включая варианты"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Включая варианты"
msgid "Part"
msgstr "Деталь"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Категория"
@@ -605,7 +593,7 @@ msgstr "Категория"
msgid "Ancestor Build"
msgstr "Родительская сборка"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Назначено мне"
@@ -653,374 +641,365 @@ msgstr "Завершено до"
msgid "Completed after"
msgstr "Завершено после"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "Минимальная дата"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Максимальная дата"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Исключить дерево"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Заказ на производство должен быть отменен перед удалением"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Расходник"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Необязательно"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Сборная деталь"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Отслеживается"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Тестируемая"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Невыполненные заказы"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Зарезервировано"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Потреблено"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "В заказе"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Заказ на производство"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Расположение"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Выход"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Фильтрация по идентификатору исходящей складской позиции. Используйте 'null', чтобы найти несмонтированные элементы сборки."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Заказы на производство"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Сборка BOM не подтверждена"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Порядок сборки не может быть создан для неактивной части"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Порядок сборки не может быть создан для разблокированной части"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Заказ на сборку может быть помечен сторонним только для покупных деталей"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Должен быть указан ответственный пользователь или группа"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Деталь заказа на производства не может быть изменена"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Целевая дата должна быть после даты начала"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Ссылка на заказ на производство"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Номер"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Краткое описание заказа на производство (необязательно)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Заказ на производство, которому принадлежит этот заказ на производство"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Выберите деталь для производства"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Ссылка на заказ"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Заказ на продажу, которому принадлежит этот заказ на производство"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Место хранения комплектующих"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Сторонняя сборка"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Этот заказ на сборку выполнен сторонней компанией"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Место хранения результата"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Выберите место хранения завершенных элементов"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Количество производимых деталей"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Количество складских позиций для производства"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Произведенные детали"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Количество складских позиций, которые были произведены"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Статус заказа на производство"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Код статуса заказа на производство"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Код партии"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Дата создания"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Дата начала сборки"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Запланированная начальная дата этого заказа на сборку"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Целевая дата завершения"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Дата завершения"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "выполнено"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Создано"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Пользователь, создавший этот заказ на производство"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Ответственный"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Пользователь, ответственный за этот заказ на производство"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Внешняя ссылка"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Ссылка на внешний URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Приоритет производства"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Приоритет этого заказа на производство"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Код проекта"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Код проекта для этого заказа на производство"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Невозможно завершить заказ на сборку при наличии открытых дочерних сборок"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Невозможно завершить заказ на сборку при незавершенных выходах"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Не удалось выгрузить задачу для распределения на сборку"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Заказ на производство {build} был завершен"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Заказ на производство был завершен"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "Для отслеживаемых деталей должны быть указаны серийные номера"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Продукция не указана"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Продукция уже произведена"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Продукция не совпадает с заказом на производство"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Количество должно быть больше нуля"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "Количество не может быть больше количества продукции"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "Выход сборки не прошёл все необходимые тесты"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "Сборка {serial} не прошла все необходимые тесты"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Выделенные на складе товары все еще находятся в производстве"
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "Невозможно частично завершить выход сборки с распределёнными элементами"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Номер позиции для производства"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Объект производства"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Объект производства"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Количество"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Требуемое количество для заказа на производство"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Количество израсходованного запаса"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Выбранная складская позиция не соответствует позиции в BOM"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "Резервируемое количество должно быть больше нуля"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Количество должно быть 1 для сериализованных запасов"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Складская позиция перераспределена"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Складская позиция"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Исходная складская позиция"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Количество на складе для производства"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Установить в"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Целевая складская позиция"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Уровень сборки"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Наименование детали"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Выход Продукции"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Продукция не совпадает с родительским заказом на производство"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Продукция не соответствует детали заказа на производство"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Эта продукция уже помечена как завершенная"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Сырье для этой продукции не полностью зарезервировано"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Введите количество продукции"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Серийные номера"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Введите серийные номера для продукции"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Местоположение склада для результата сборки"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Автоматически выделить серийные номера"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Следующие серийные номера уже существуют или недействительны"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Необходимо представить список выхода деталей"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Место хранения для списанной продукции"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Отменить резервирование"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Отменить все резервы запасов для списанной продукции"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Причина списания продукции"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Место хранения для завершенной продукции"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Разрешить неполное резервирование"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Израсходовать зарезервированные остатки"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Удалить незавершенную продукцию"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Удалить всю незавершенную продукцию"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Запрещено"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Принять как поглощенный этим заказом на производство"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Отменить резерв, до завершения заказа на производство"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Перераспределенные запасы"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Некоторые складские позиции были перераспределены"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Разрешить не полное резервирование"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Необходимые запасы не были полностью зарезервированы"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Разрешить незавершенные производимые детали"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Допустить, что требуемое кол-во продукции не завершено"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Требуемое количество деталей не было произведено"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Производственный заказ имеет незавершённые дочерние заказы"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Заказ на производство должен быть в стадии выполнения"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Заказ на производство имеет незавершенную продукцию"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Позиция для производства"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Выход продукции"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Продукция должна указывать на тот же производство"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Позиция для производства"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Элемент должен быть в наличии"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Превышено доступное количество ({q})"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Продукция должна быть указан для резервирования отслеживаемых частей"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Необходимо указать резервируемые элементы"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Исключить место хранения"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Исключить складские позиции из этого выбранного места хранения"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Обменный остаток"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Заменить остатки"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Разрешить резервирование замещающих деталей"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Необязательные элементы"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Зарезервировать необязательные позиции BOM для заказа на производство"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Ссылка на спецификацию (BOM)"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID детали в спецификации (BOM)"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Название детали в спецификации (BOM)"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "Установить в"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Сборка"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Деталь поставщика"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Зарезервированное количество"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Ссылка на сборку"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Название категории детали"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Отслеживание"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Унаследованные"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Есть варианты"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Позиция BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "В производстве"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Запланировано к сборке"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Внешний склад"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Доступный запас"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Доступный запас заменителей"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Доступный запас вариантов"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Потреблённое количество превышает выделенное количество"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Дополнительные примечания по расходу запаса"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Дублирование выделения элемента сборки"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Строка сборки должна ссылаться на правильный заказ на сборку"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Дублирование выделения строки сборки"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "Должен быть указан хотя бы один элемент или строка"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "В обработке"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Продукция"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Отложен"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Отменён"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Завершён"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Заказ на производство {build} был завершен"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Заказ на производство был завершен"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Необходимый запас для заказа на производство"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Заказ на сборку {build} требует дополнительный запас"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Просроченный заказ сборки"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Заказ на производство {bo} просрочен"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Ссылка"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Файл"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "У пользователя нет прав для удаления этих вложений"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "У пользователя нет прав на удаление этого вложения"
@@ -1554,794 +1553,835 @@ msgstr "Нет плагина"
msgid "Project Code Label"
msgstr "Название кода проекта"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Обновлено"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Временная метка последнего обновления"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Обновлено"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Пользователь, последний раз обновивший этот объект"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Уникальный код проекта"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Описание проекта"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "Пользователь или группа, ответственные за этот проект"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Ключ настроек"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Значения настроек"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Выбранное значение не является допустимым"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Значение должно быть булевым"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Значение должно быть целым числом"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Значение должно быть допустимым числом"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Значение не прошло проверку"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "Скидка распространяется на заданное количество"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Цена"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Цена за единицу для указанного количества"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Конечная точка"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "Конечная точка, на которой принимается этот веб-хук"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "Имя для этого веб-хука"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Этот веб-хук активен?"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Токен"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Токен для доступа"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Секрет"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Общий ключ для HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID Сообщения"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Уникальный идентификатор этого сообщения"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Хост"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Хост, с которого было получено это сообщение"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Заголовок"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Заголовок этого сообщения"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Тело"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Текст этого сообщения"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Конечная точка, на которую было получено это сообщение"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Работал над"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Работа над этим сообщением завершена?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Код"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Заголовок"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Ссылка"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Опубликовано"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Автор"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Итого"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Читать"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Эта новость была прочитана?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Файл изображения"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Тип целевой модели для этого изображения"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "ID целевой модели для этого изображения"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Пользовательская единица измерения"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Символ единицы должен быть уникальным"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Имя единицы должно быть действительным идентификатором"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Название единицы"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Символ"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Обозначение единицы измерения (необязательно)"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Определение"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Определение единицы измерения"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Вложения"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Файл не найден"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Отсутствует внешняя ссылка"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Тип модели"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Тип целевой модели для изображения"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Выберите файл для вложения"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Комментарий"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Описание вложения"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Дата загрузки"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Дата загрузки файла"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Размер файла"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Размер файла в байтах"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Указан недопустимый тип модели для вложения"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Пользовательское состояние"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Пользовательские состояния"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Группа статусов"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "Группа статусов, которая будет дополнена пользовательским состоянием"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Логическое состояние"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Значение"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "Числовое значение, которое будет сохранено в базе данных"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "Название состояния"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Метка"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "Метка, которая будет отображаться на фронтенде"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Цвет"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Цвет отображения в интерфейсе"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Модель"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Модель, с которой связано это состояние"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Необходимо выбрать модель"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Необходимо выбрать ключ"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Логическое состояние должно быть выбрано"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "Ключ должен отличаться от логического ключа"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "Должен быть указан корректный класс ссылочного статуса"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "Состояние должно отличаться от других логических состояний выбранного статуса"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "Логическое состояние должно быть из множества логических состояний выбранного статуса"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Список выбора"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Списки выбора"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Название списка выбора"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Описание списка выбора"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Заблокирована"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Этот список выбора заблокирован?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Можно ли использовать этот список выбора?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Исходный плагин"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Плагин, который предоставляет список выбора"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Исходная строка"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "Необязательная строка, определяющая источник, используемый для этого списка"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "Запись по умолчанию"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "Вариант по умолчанию для этого списка выбора"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Создано"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "Дата и время создания списка выбора"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Последнее обновление"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "Дата и время последнего обновления списка выбора"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "Вариант списка выбора"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Варианты списка выбора"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Список выбора, к которому относится данный вариант"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Значение варианта списка выбора"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Метка для элемента списка выбора"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Описание варианта списка выбора"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Активен ли варианта списка выбора?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Шаблон параметра"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Шаблоны параметров"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "У параметров-переключателей не может быть единицы измерения"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "У параметров-переключателей не может быть вариантов"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Варианты должны быть уникальными"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Имя шаблона параметров должно быть уникальным"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "Тип целевой модели для этого шаблона параметра"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Название параметра"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Единица измерения"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Физическая единица этого параметра"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Описание параметра"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Переключатель"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Этот параметр является переключателем?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Варианты"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Возможные варианты этого параметра (разделить запятой)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Список выбора для этого параметра"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Включено"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Включен ли этот шаблон параметра?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Параметр"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Параметры"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Недопустимое значение параметра"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Указан неверный тип модели для параметра"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "ID модели"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Шаблон параметра"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Данные"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "Значение параметра"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Заметка"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Опциональное поле записей"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Сканирование штрихкодов"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Данные штрихкода"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "Пользователь, который сканировал штрих-код"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Метка времени"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Дата и время сканирования штрих-кода"
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr "URL-адрес, обработавший штрихкод"
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Контекст"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Контекстные данные для сканирования штрих-кода"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Ответ"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Результат"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Сканирование штрихкода было успешным?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Произошла ошибка"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "Сообщение электронной почты"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "Сообщения электронной почты"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Объявлено"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Отправлено"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Неудача"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Доставлено"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Подтверждено"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Входящее"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Исходящее"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Без ответа"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Отслеживать доставку"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Отслеживать прочтение"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Отслеживать клики"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Глобальный идентификатор"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "ID цепочки"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "Цепочка"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Связанная цепочка для этого сообщения"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Приоритет"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "Цепочка электронной почты"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "Цепочки электронной почты"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "Уникальный идентификатор этой цепочки"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Запущено внутренне"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Эта цепочка была начата внутри?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "Дата и время создания цепочки"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "Дата и время последнего обновления цепочки"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Полученные элементы"
@@ -2451,25 +2491,25 @@ msgstr "Именованные аргументы"
msgid "Task keyword arguments"
msgstr "Именованные аргументы задачи"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Тип модели"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Список выбора заблокирован"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "дней"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "Модуль обновления валюты"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "Скачать по ссылке"
+msgid "Upload Size Limit"
+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 "Ограничение размера загрузки"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "Требуется спецификация схемы при проверке URL-адресов"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "Интервал проверки обновлений"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "Автоматическое резервное копирование"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "Интервал резервного копирования"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "Укажите количество дней между событиями автоматического резервного копирования"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "Интервал удаления задачи"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "Результаты фоновых задач будут удалены после указанного количества дней"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "Интервал удаления журнала ошибок"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "Журналы ошибок будут удалены после указанного количества дней"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "Интервал удаления уведомления"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "Уведомления пользователя будут удалены после указанного количества дней"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "Интервал удаления электронной почты"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "Сообщения электронной почты будут удалены через указанное количество дней"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "Защитить журнал электронной почты"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "Предотвращать удаление записей журнала электронной почты"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Поддержка штрих-кодов"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "Сохранять результаты сканирования штрихкодов"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "Сохранять результаты сканирования штрихкодов в базе данных"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "Максимальное количество сохранённых сканирований штрихкодов"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "Максимальное число результатов сканирования штрихкодов для хранения"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Задержка сканирования штрих-кода"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Время задержки обработки штрих-кода"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Поддержка веб-камер штрих-кодов"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "Показать данные штрих-кода"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "Отображать данные штрих-кода в браузере в виде текста"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "Плагин генерации штрих-кода"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "Плагин для использования внутренней генерации данных штрих-кодов"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Ревизия детали"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Включить поле ревизии для элемента"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Только ревизия сборки"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Разрешить ревизии только для сборочных деталей"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Разрешить удаление из заказа"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "Разрешить удаление частей, которые используются в заказе"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "Регулярное выражение IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "Шаблон регулярного выражения для сопоставления IPN детали"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "Разрешить повторяющиеся IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "Разрешить нескольким элементам использовать один и тот же IPN"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "Разрешить редактирование IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "Разрешить изменение значения IPN при редактировании детали"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "Скопировать данные BOM детали"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "Копировать данные BOM по умолчанию при дублировании детали"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "Скопировать данные параметров детали"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "Копировать данных параметров по умолчанию при дублировании детали"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "Скопировать данные тестирования детали"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "Копировать данные тестирования по умолчанию при дублировании детали"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "Скопировать параметры по шаблону категории"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "Копировать параметры по шаблону категории при создании детали"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "По умолчанию детали являются шаблонами"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Компонент"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Можно купить"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "По умолчанию детали являются отслеживаемыми"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Можно продавать"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Детали продаются по умолчанию"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "По умолчанию детали являются отслеживаемыми"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "Виртуальная"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Детали являются виртуальными по умолчанию"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Показывать связанные детали"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Отображать связанные детали для элемента"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Начальные данные о запасах"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "Разрешить создание начального запаса при добавлении новой детали"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "Исходные данные о поставщике"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "Формат отображения детали"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Формат для отображения имени детали"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "Значок раздела по умолчанию"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "Минимальные Цены Десятичные Значки"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "Минимальное количество десятичных знаков при отображении данных о ценах"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "Макс. Цены десятичные знаки"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "Минимальное количество десятичных знаков при отображении данных о ценах"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "Использовать цены поставщика"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "Включить разницу цен поставщиков при расчетах цен"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "Изменить историю покупки"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "Использовать цены из складских позиций"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "Возраст цен складских позиций"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "Использовать варианты цен"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "Включить разницу цен поставщиков при расчетах цен"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "Только Активные Варианты"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "Использовать только активные запчасти для расчета стоимости варианта"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "Автоматическое обновление цен"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "Автоматически обновлять цены деталей при изменении внутренних данных"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Интервал пересчета цен"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "Количество дней до автоматического обновления цены"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "Внутренние цены"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Разрешить внутренние цены для частей"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Переопределение внутренней цены"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "При наличии внутренних цен переопределить ценовой диапазон"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Включить печать этикеток"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "Включить печать этикеток из веб-интерфейса"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "Изображение меток DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "Включить отчеты"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Включить генерацию отчетов"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Режим отладки"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "Генерировать отчеты в режиме отладки (вывод HTML)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "Журнал ошибок отчета"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "Размер страницы"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "Размер страницы по умолчанию для PDF отчетов"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "Принудительное применение единиц измерения параметров"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "Глобально уникальные серийные номера"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "Серийные номера для складских позиций должны быть уникальными глобально"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "Удалить исчерпанный запас"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Код партии Шаблона"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "Срок годности Запасов"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Включить функцию истечения срока годности"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Использовать просроченные остатки в производстве"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Разрешить продажу просроченных запасов"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Время Залежалости Запасов"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "Количество дней перед тем как складская единица будет считаться просроченной"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "Использовать просроченные остатки в производстве"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Разрешить использовать просроченные остатки в производстве"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Контроль за собственными запасами"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "Значок местоположения по умолчанию"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "Показать установленные складские позиции"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "Отображать установленные складские позиции в складских таблицах"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "Проверять спецификацию при установке изделий"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "Разрешить передачу товара, отсутствующего на складе"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Паттерн ссылки заказа на производство"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "Ответственный владелец должен быть назначен для каждого заказа"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "Требовать активную деталь"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "Запрещать создание заказов на сборку для неактивных деталей"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "Требовать заблокированную деталь"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "Запрещать создание заказов на сборку для разблокированных деталей"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "Требовать валидную спецификацию"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "Запрещать создание заказов на сборку, пока спецификация не будет подтверждена"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "Требовать закрытия дочерних заказов"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "Запрещать завершение заказа на сборку, пока не закрыты все дочерние заказы"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "Сторонний заказ на сборку"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Включить функциональность сторонних заказов на сборку"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Блокировать до прохождения тестов"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Включить заказы на возврат"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Шаблон заказа на возврат товара"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Необходимый шаблон для создания поля «Возврат заказа»"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Редактировать завершенные возвратные заказы"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Разрешить редактирование возвращенных заказов после их завершения"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Шаблон заказа на возврат товара"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Необходимый шаблон для создания поля «Возврат заказа»"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Отгрузка по умолчанию для заказа на продажу"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Включить создание отгрузки по умолчанию для заказов на продажу"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Редактирование завершённых заказов на продажу"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Разрешить редактирование заказов на продажу после их отправки или завершения"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Отгрузка требует проверки"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Запрещать завершение отгрузок, пока товары не проверены"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Отмечать отправленные заказы как завершённые"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Заказы на продажу, помеченные как отгруженные, будут автоматически завершены, минуя статус 'отгружено'"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Шаблон ссылки заказа на закупку"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "Требуемый шаблон для генерации поля ссылки заказа на закупку"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "Редактировать завершённые заказы на закупку"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "Разрешить редактирование заказов после их отправки или завершения"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "Конвертировать валюту"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "Преобразовывать стоимость товара в базовую валюту при поступлении на склад"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Автоматически выполнять заказы на закупку"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "Автоматически отмечать заказы на закупку как завершённые при получении всех позиций"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "Включить функцию восстановления пароля"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "Включить функцию восстановления пароля на странице входа"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "Разрешить регистрацию"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "Включить самостоятельную регистрацию пользователей на странице входа"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "Включить SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Включить SSO на странице входа"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Включить регистрацию через SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "Включить самостоятельную регистрацию пользователей через SSO на странице входа"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "Включить синхронизацию групп через SSO"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "Включить синхронизацию групп InvenTree с группами, предоставляемыми IdP"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "Ключ группы SSO"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr "Имя атрибута группы, предоставленного провайдером идентификации"
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr "Отображение групп SSO"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Удалять группы вне SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Необходимо указать EMail"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "Требовать электронную почту при регистрации"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "Автозаполнение пользователей SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "Автоматически заполнять данные пользователя из аккаунта SSO"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "Написать дважды"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "При регистрации дважды спрашивать адрес электронной почты"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "Пароль дважды"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "При регистрации запросить пароль у пользователей дважды"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "Разрешенные домены"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "Ограничить регистрацию определёнными доменами (через запятую, начиная с @)"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "Группа при новой регистрации"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Принудительное MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Пользователи должны использовать многофакторную безопасность."
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Проверять плагины при запуске"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr "Проверять, что все плагины установлены при запуске — включать в контейнерных средах"
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "Проверка обновлений плагинов"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "Включить периодическую проверку обновлений установленных плагинов"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "Включить интеграцию URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Разрешить плагинам добавлять маршруты URL"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Включить интеграцию навигации"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Разрешить плагинам интегрироваться в навигацию"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Включить интеграцию приложений"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Разрешить плагинам добавлять приложения"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Включить интеграцию расписаний"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "Разрешить плагинам запускать запланированные задачи"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "Включить интеграцию событий"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "Разрешить плагинам реагировать на внутренние события"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "Включить интеграцию интерфейса"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "Разрешить плагинам интегрироваться в пользовательский интерфейс"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "Включить интеграцию почты"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "Разрешить плагинам обрабатывать исходящую и входящую почту"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "Включить коды проекта"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "Включить коды проекта для отслеживания проектов"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr "Включить инвентаризацию"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "Включить функцию записи истории уровней и стоимости запасов"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Исключить сторонний склад"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr "Исключить из инвентаризации единицы хранения на внешних складах"
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Автоматический период инвентаризации"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr "Кол-во дней между автоматических записей инвентаризации"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr "Удалять устаревшие записи инвентаризаций"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr "Удалять записи инвентаризаций старше N дней"
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr "Частота удаления записей инвентаризаций"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr "Записи инвентаризации будут удалены после N дней"
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "Удалять старые записи истории запасов"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr "Удалять записи истории запасов старше указанного количества дней"
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr "Интервал удаления истории запасов"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr "Записи истории запасов будут удалены через указанное количество дней"
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Показывать полные имена пользователей"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "Отображать полные имена пользователей вместо логинов"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "Отображать профили пользователей"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "Отображать профили пользователей на их странице профиля"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Добавлять данные об испытательном оборудовании"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "Добавлять данные об испытательном оборудовании в результаты тестирования"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "Включить пинг машин"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "Включить периодическую задачу пинга зарегистрированных машин для проверки их статуса"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Выключено: полный путь категории отображается во всплывающей подсказке. Включено: полный путь категории отображается как обычный текст."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Получать отчёты об ошибках"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Получать уведомления о системных ошибках"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Последние использованные печатающие машины"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Сохранять последние использованные печатающие машины для пользователя"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Все модели"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Не указан тип модели вложения"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Недопустимый тип модели вложения"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Минимальное количество знаков не может быть больше максимального"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Максимальное количество знаков не может быть меньше минимального"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Пустой домен не допускается."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Недопустимое доменное имя: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Значение должно быть в верхнем регистре"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Значение должно быть допустимым идентификатором переменной"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Производитель"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Компания"
@@ -4050,8 +4193,8 @@ msgstr "Контактный телефон"
msgid "Contact email address"
msgstr "Электронная почта контакта"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Контакт"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Адрес"
@@ -4195,12 +4338,12 @@ msgstr "Записи отправления для внутреннего пол
msgid "Link to address information (external)"
msgstr "Ссылка на адресную информацию (внешняя)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Базовая деталь"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "Артикул производителя"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Артикул производителя"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Поставщик"
@@ -4254,7 +4397,7 @@ msgstr "Поставщик"
msgid "Select supplier"
msgstr "Выберите поставщика"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "Артикул поставщика"
@@ -4282,16 +4425,16 @@ msgstr "Ссылка на сайт поставщика"
msgid "Supplier part description"
msgstr "Описание детали поставщика"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "базовая стоимость"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Минимальная плата (например, складская)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Упаковка"
@@ -4307,7 +4450,7 @@ msgstr "Количество в упаковке"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов."
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "множественные"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr "Исходные данные строки"
msgid "Errors"
msgstr "Ошибки"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Корректный"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Неизвестно"
@@ -4719,7 +4862,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 "Группа"
@@ -4743,117 +4886,118 @@ msgstr "Максимальный прогресс"
msgid "Maximum value for progress type, required if type=progress"
msgstr "Максимальное значение для типа прогресса, требуется, если тип=progress"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Ссылка на заказ"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Невыполненный"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Есть код проекта"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Создал"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Создано до"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Создано после"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Есть дата начала"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Дата начала до"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Дата начала после"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Есть целевая дата"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Целевая дата до"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Целевая дата после"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Имеет цену"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Завершено до"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Завершено после"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Заказ"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Заказ выполнен"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Внутренняя деталь"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Заказ в ожидании"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Завершённые"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Есть отгрузка"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr "Заказ на закупку"
msgid "Sales Order"
msgstr "Заказ на продажу"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Заказ на возврат"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Общая стоимость"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Общая стоимость этого заказа"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Валюта заказа"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "Валюта заказа (оставьте пустым для использования валюты по умолчанию для компании)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Этот заказ заблокирован и не может быть изменён"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Контакт не соответствует выбранной компании"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Дата начала должна быть до целевой даты"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "Адрес не соответствует выбранной компании"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Описание заказа (дополнительно)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "Выберите код проекта для этого заказа"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Ссылка на внешнюю страницу"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Начальная дата"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "Запланированная начальная дата этого заказа"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Целевая дата"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Ожидаемая дата доставки заказа. После этой даты заказ будет считаться просроченным."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Дата создания"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Дата выдачи заказа"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Пользователь или группа, ответственная за этот заказ"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Контактное лицо по данному заказу"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Адрес компании по этому заказу"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Статус"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Статус заказа на закупку"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Компания, в которой детали заказываются"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Номер у поставщика"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Номер заказа у поставщика"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "получил"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Дата завершения заказа"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Место хранения"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Место хранения для полученных позиций"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Поставщик детали должен совпадать с поставщиком заказа на закупку"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Позиция не соответствует заказу на закупку"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "В позиции отсутствует связанная деталь"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Количество должно быть положительным числом"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "Покупатель"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "Компания, которой детали продаются"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Статус заказа на продажу"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Ссылка клиента"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Код ссылки на заказ клиента"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Дата отгрузки"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "Отправлено"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Заказ уже выполнен"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Заказ уже отменен"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "Только открытый заказ может быть отмечен как завершённый"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "Заказ не может быть завершён, так как есть незавершённые отгрузки"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "Заказ не может быть завершён, так как есть незавершённые распределения"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "Заказ не может быть завершён, так как есть незавершённые позиции"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "Заказ заблокирован и не может быть изменён"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Количество"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Номер позиции"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Записи о позиции"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Описание позиции (необязательно)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Дополнительный контекст для этой строки"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Цена за единицу"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Позиция заказа на закупку"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Поставляемая деталь должна соответствовать поставщику"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "Заказ на сборку должен быть отмечен как внешний"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "Заказы на сборку могут быть связаны только со сборочными деталями"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "Деталь заказа на сборку должна соответствовать детали позиции"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Деталь поставщика"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Получено"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Количество полученных предметов"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Закупочная цена"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Закупочная цена"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "Внешний заказ на сборку, который будет выполнен этой позицией"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "Дополнительная позиция заказа на закупку"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Позиция заказа на продажу"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "Только продаваемые детали могут быть назначены заказу на продажу"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "Цена продажи"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Цена последней продажи"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Доставлен"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Отгруженное кол-во"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Отгрузка заказа на продажу"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "Адрес отгрузки должен соответствовать клиенту"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Адрес доставки для этой отгрузки"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Дата отправления"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Дата доставки"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Дата доставки отгрузки"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Проверн"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Отправление"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Номер отправления"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Номер отслеживания"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Информация об отслеживании доставки"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Номер счета"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Номер ссылки на связанную накладную"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Отгрузка уже отправлена"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Отправка не имеет зарезервированных складских позиций"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "Отгрузка должна быть проверена, прежде чем её можно завершить"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "Дополнительная позиция заказа на продажу"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Распределение заказа на продажу"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Складская позиция не была назначена"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "Невозможно распределить запас к позиции без детали"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Количество распределения не может превышать количество на складе"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "Резервируемое количество должно быть больше нуля"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "Количество должно быть 1 для сериализированных складских позиций"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "Заказ на продажу не соответствует отгрузке"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "Отгрузка не соответствует заказу на продажу"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Строка"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Ссылка на отгрузку заказа на продажу"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Элемент"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Выберите складскую позицию для резервирования"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Укажите резервируемое количество"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Ссылка на заказ на возврат"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Компания, из которой возвращаются товары"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Статус заказа на возврат"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Позиция заказа на возврат"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Необходимо указать складской элемент"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Количество возврата превышает количество на складе"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "Количество возврата должно быть больше нуля"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Недопустимое количество для серийного складского элемента"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Выберите позицию, возвращаемую от клиента"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Дата получения"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "Дата возврата"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Результат"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Результат для этой позиции"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "Стоимость, связанная с возвратом или ремонтом этой позиции"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "Дополнительная позиция заказа на возврат"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID заказа"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID заказа для дублирования"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Копировать позиции"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Копировать позиции из исходного заказа"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Копировать дополнительные позиции"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "Копировать дополнительные позиции из исходного заказа"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Скопировать параметры"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Позиции"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Завершённые позиции"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Дублировать заказ"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Указать параметры для дублирования этого заказа"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Недействительный ID заказа"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Имя поставщика"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Заказ не может быть отменён"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "Разрешить закрывать заказ с незавершёнными позициями"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "В заказе есть незавершённые позиции"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Заказ не открыт"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Автоматическая цена"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Валюта заказа на закупку"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Объединять элементы"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Артикул"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Внутренний артикул детали"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Внутреннее название детали"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Необходимо указать поставляемую деталь"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Необходимо указать заказ на закупку"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Поставщик должен соответствовать заказу на закупку"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "Заказ на закупку должен соответствовать поставщику"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Позиция"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Выберите место назначения для полученных элементов"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "Введите код партии для поступающих складских позиций"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Истекает"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "Введите дату истечения срока годности для поступающих складских единиц"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Введите серийные номера для входящих складских позиций"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "Переопределить информацию об упаковке для поступающих складских единиц"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Дополнительная заметка для поступающих складских единиц"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Штрих-код"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Сканированный штрих-код"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Штрихкод уже используется"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Необходимо предоставить позиции"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Необходимо указать место назначения"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Предоставленные значения штрихкодов должны быть уникальными"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Отгрузки"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Выполненные отгрузки"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "Зарезервированные позиции"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Валюта цены продажи"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Выделенные элементы"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Информация об отгрузке не предоставлена"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "Позиция не связана с этим заказом"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Количество должно быть положительным"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Введите серийные номера для резервирования"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Отгрузка уже отправлена"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Отгрузка не связана с этим заказом"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "Совпадений для следующих серийных номеров не найдено"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Следующие серийные номера недоступны"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Позиция заказа на возврат"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "Позиция не соответствует заказу на возврат"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "Позиция уже получена"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "Количество для возврата"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Валюта цены позиции"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Потерян"
@@ -5661,6 +5879,11 @@ msgstr "Возврат"
msgid "Reject"
msgstr "Отклонён"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Оформлен"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Просроченные заказы на закупку"
@@ -5696,7 +5919,7 @@ msgstr "Помечено звёздочкой"
msgid "Filter by starred categories"
msgstr "Фильтровать по отмеченным категориям"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Глубина"
@@ -5704,7 +5927,7 @@ msgstr "Глубина"
msgid "Filter by category depth"
msgstr "Фильтровать по глубине категории"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Верхний уровень"
@@ -5712,7 +5935,7 @@ msgstr "Верхний уровень"
msgid "Filter by top-level categories"
msgstr "Фильтровать по категориям верхнего уровня"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Каскад"
@@ -5732,75 +5955,79 @@ msgstr "Фильтровать по родительской категории"
msgid "Exclude sub-categories under the specified category"
msgstr "Исключить подкатегории указанной категории"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Есть результаты"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Является вариантом"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Является ревизией"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Есть ревизии"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Спецификация валидна"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Каскадные категории"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr "Если включено, включать элементы в дочерних категориях указанной категории"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "Сборочная деталь активна"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "Отслеживаемая сборочная деталь"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Сборная деталь тестируется"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "Деталь компонента активна"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "Отслеживаемая деталь компонента"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Компонент тестируется"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "Сборочная деталь компонента"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "Виртуальная деталь компонента"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "На складе"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Использования"
@@ -5809,11 +6036,11 @@ msgstr "Использования"
msgid "Part Category"
msgstr "Категория детали"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "Категория детали"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "Место хранения по умолчанию"
@@ -5821,7 +6048,7 @@ msgstr "Место хранения по умолчанию"
msgid "Default location for parts in this category"
msgstr "Место хранения по умолчанию для деталей этой категории"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Структура"
@@ -5837,12 +6064,12 @@ msgstr "Ключевые слова по умолчанию"
msgid "Default keywords for parts in this category"
msgstr "Ключевые слова по умолчанию для деталей этой категории"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Значок"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Значок (необязательно)"
@@ -5862,984 +6089,1028 @@ msgstr "Значение по умолчанию"
msgid "Default Parameter Value"
msgstr "Значение параметра по умолчанию"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Продать несколько"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Валюта, используемая для кэширования расчётов цен"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Минимальная Стоимость BOM"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Минимальная стоимость компонентных деталей"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Максимальная Стоимость BOM"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Максимальная стоимость компонентных деталей"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Минимальная стоимость закупки"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Минимальная историческая стоимость закупки"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Максимальная стоимость закупки"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Максимальная историческая стоимость закупки"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Минимальная внутренняя цена"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Минимальная стоимость на основе внутренних ценовых уровней"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Максимальная внутренняя цена"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Максимальная стоимость на основе внутренних ценовых уровней"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Минимальная цена поставщика"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Минимальная цена детали от внешних поставщиков"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Максимальная цена поставщика"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Максимальная цена детали от внешних поставщиков"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Минимальная стоимость варианта"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Расчётная минимальная стоимость вариантов деталей"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Максимальная стоимость варианта"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Расчётная максимальная стоимость вариантов деталей"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Минимальная Стоимость"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Переопределить минимальную стоимость"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Максимальная Стоимость"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Переопределить максимальную стоимость"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Расчётная общая минимальная стоимость"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Расчётная общая максимальная стоимость"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Минимальная цена продажи"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Минимальная цена продажи на основе ценовых уровней"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Максимальная цена продажи"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Максимальная цена продажи на основе ценовых уровней"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Минимальная стоимость продажи"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Минимальная историческая цена продажи"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Максимальная стоимость продажи"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Максимальная историческая цена продажи"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Деталь для инвентаризации"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Количество элементов"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Количество отдельных складских позиций на момент инвентаризации"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Общий доступный запас на момент инвентаризации"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Дата"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Дата проведения инвентаризации"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Минимальная стоимость запасов"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Оценочная минимальная стоимость имеющихся запасов"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Максимальная стоимость запасов"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Оценочная максимальная стоимость имеющихся запасов"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Цена продажи детали по порогу"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Шаблон теста детали"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "Шаблоны тестов можно создавать только для тестируемых деталей"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "Шаблон теста с тем же ключом уже существует для детали"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Название теста"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Введите имя для теста"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Ключ теста"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Упрощённый ключ для теста"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Описание теста"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Введите описание для этого теста"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Активен ли данный тест?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Необходим"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Необходимо ли пройти этот тест?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Требуется значение"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "Требуется ли значение для этого теста при добавлении результата?"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Требуются вложения"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Допустимые варианты данного теста(через запятую)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "Пункт спецификации нельзя изменить — сборка заблокирована"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Выберите родительскую деталь"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Суб-деталь"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Выбрать деталь для использования в BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Количество элементов в спецификации"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Эта позиция спецификации необязательна"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Количество для подготовки"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Потери"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Округление до кратности"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Ссылка на позицию спецификации"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Заметка о позиции в спецификации"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Контрольная сумма"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Контрольная сумма строки спецификации"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Проверен"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Этот пункт спецификации подтверждён"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Наследуется"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Позиция спецификации наследуется разновидностями детали"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "Эту позицию можно заменять деталями, которые находятся на складе"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "Для отслеживаемых деталей количество должно быть целым числом"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Необходимо указать поддеталь"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Замена пункта спецификации"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "Деталь для замены не может быть такой же, как основная деталь"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Позиция BOM-родителя"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Замена детали"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Деталь 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Деталь 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Выберите связанную деталь"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Заметка для данной связи"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "Нельзя создать отношение детали с самой собой"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Дублирующее отношение уже существует"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Родительская категория"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Родительская категория деталей"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Подкатегории"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Результаты"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "Количество результатов, зарегистрированных по этому шаблону"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Валюта закупки складской позиции"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Файл не является изображением"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Оригинальная деталь"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Выберите исходную деталь для копирования"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Копировать Изображение"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Копировать изображение из исходной детали"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Скопировать BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Копировать спецификацию из исходной детали"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Копировать данные параметров из исходной детали"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Копировать Записи"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Скопировать записи из оригинальной детали"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Копировать тесты"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "Копировать шаблоны тестов из исходной детали"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Начальное количество на складе"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Начальное местоположение запаса"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Укажите начальное местоположение запаса для этой детали"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Артикул производителя"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Выбранная компания не является допустимым поставщиком"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Выбранная компания не является допустимым производителем"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "Деталь производителя с данным артикулом уже существует"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "Деталь поставщика с данным артикулом уже существует"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Название категории"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Производится"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "Количество этой детали, находящееся в производстве"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "Оставшееся количество этой детали, запланированное к сборке"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Складские позиции"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Ревизии"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Нераспределённый запас"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Запас вариантов"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Дублировать деталь"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Копировать начальные данные из другой детали"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Начальный запас"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Создавать деталь с начальным количеством на складе"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Информация о поставщике"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "Добавить начальную информацию о поставщике для этой детали"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "Копировать параметры категории"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Копировать шаблоны параметров из выбранной категории деталей"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Существующее изображение"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Имя файла существующего изображения детали"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Файл изображения не существует"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Проверить всю спецификацию"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Можно произвести"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Требуется для заказов на сборку"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Выделено для заказов на сборку"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Требуется для заказов на продажу"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Выделено для заказов на продажу"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "Внутренний артикул детали"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "Описание детали"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации"
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации"
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)"
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr "Создать записи инвентаризации"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr "Сохранить записи инвентаризации для выбранных деталей"
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "Создать отчет"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr "Создать отчёт инвентаризации для выбранных деталей"
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Минимальная цена"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Переопределить рассчитанное значение минимальной цены"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Валюта минимальной цены"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Максимальная цена"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Переопределить рассчитанное значение максимальной цены"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Валюта максимальной цены"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Обновить"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Обновить цены для этой детали"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "Минимальная цена не должна превышать максимальную цену"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Выберите родительскую сборку"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Выберите деталь, которая является компонентом"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Выберите деталь, из которой копировать спецификацию"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Удалить существующие данные"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Удалить существующие пункты спецификации перед копированием"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Включая наследуемые"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "Пропустить некорректные строки"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "Включите эту опцию, чтобы пропускать недопустимые строки"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "Копировать детали-заменители"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Копировать детали-заменители при дублировании пунктов спецификации"
@@ -7091,15 +7362,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 "Нет элементов для печати"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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 "Альбомная"
@@ -7762,7 +8033,7 @@ msgstr "Пакетный плагин"
msgid "Plugin"
msgstr "Плагин"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Автор не найден"
@@ -8021,7 +8292,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 "Ни одного допустимого элемента не предоставлено для шаблона"
@@ -8065,112 +8336,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 "Описание медиафайла"
@@ -8225,13 +8496,10 @@ msgstr "Необходимые материалы"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Изображение детали"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Оформлен"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Требуется для"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Серийный номер"
@@ -8292,7 +8560,7 @@ msgstr "Отчет тестирования складской позиции"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Установленные элементы"
@@ -8325,6 +8593,10 @@ msgstr "Нет результата (обязательно)"
msgid "No result"
msgstr "Нет результата"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "Тег part_image требует экземпляр детали"
msgid "company_image tag requires a Company instance"
msgstr "Тег company_image требует экземпляр компании"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Фильтровать по глубине местоположения"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Фильтровать по местоположениям верхнего уровня"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Включать подместоположения в отфильтрованные результаты"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Основной склад"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Фильтровать по родительскому местоположению"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Название детали (без учёта регистра)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Название детали содержит (без учёта регистра)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Название детали (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "IPN детали (без учёта регистра)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "IPN детали содержит (без учёта регистра)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "IPN детали (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Минимальный запас"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Максимальный запас"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Код статуса"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Внешнее местоположение"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Израсходовано для заказов на сборку"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Установлено в другом складе"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Древо Деталей"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Обновлено до"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Обновлено после"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Инвентаризация до"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Инвентаризация после"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Дата истечения до"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Дата истечения после"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Залежалый"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Укажите первичный ключ складского элемента, чтобы исключить этот элемент и всех его потомков"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Каскад местоположений"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Если включено, включать элементы в дочерних местоположениях данного местоположения"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Фильтровать по числовому идентификатору местоположения или литералу 'null'"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Необходимо указать количество"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Необходимо предоставить действительную деталь"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Указанная поставляемая деталь не существует"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "У поставляемой детали определён размер упаковки, но флаг use_pack_size не установлен"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Не нужно указывать серийные номера для неотслеживаемых деталей"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Включать установленные"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Если включено, включать результаты тестов для предметов, установленных под данным складским элементом"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Фильтровать по числовому идентификатору складского элемента"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "Складской элемент с ID {id} не существует"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "Включая варианты деталей"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "После"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "До"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Тип местоположения склада"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Типы местоположения склада"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "Значок по умолчанию для мест хранения с невыбранным значком (необязательно)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Место хранения"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Места хранения"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Владелец"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Выберите владельца"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Внешний"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Это сторонний склад"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Тип места хранения"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Тип места хранения данного склада"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} не существует"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Необходимо указать деталь"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "Складские позиции не могут находиться в структурных местах хранения!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "Складская позиция не может быть создана для виртуальных деталей"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "Количество должно быть 1 для элемента с серийным номером"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "Серийный номер нельзя задать, если количество больше 1"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "Элемент не может принадлежать сам себе"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "Элемент должен иметь ссылку на производство, если is_building=True"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "Ссылка на производство не указывает на тот же элемент"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "Складская позиция"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Базовая деталь"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "Выберите соответствующего поставщика детали для этой складской позиции"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "Где находится эта складская позиция?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Упаковка этой складской позиции хранится в"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Установлено в"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "Установлен ли этот элемент в другой элемент?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "Серийный номер для этого элемента"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Код партии для этой складской позиции"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Количество на складе"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Исходное производство"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Производства для этой складской позиции"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Поглощен"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Заказ на производство, который поглотил эту складскую позицию"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Исходный заказ на закупку"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Заказ на закупку для этой складской позиции"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Целевой заказ на продажу"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "Удалить при обнулении"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "Удалить эту складскую позицию при обнулении складского запаса"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Цена за единицу на момент покупки"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Преобразовано в деталь"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Количество превышает доступный запас"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Деталь не является отслеживаемой"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Количество должно быть целым числом"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "Количество не должно превышать доступный запас ({self.quantity})"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "Серийные номера должны быть предоставлены в виде списка"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Количество не соответствует серийным номерам"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr "Нельзя назначить запас в структурное местоположение"
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Шаблон теста не существует"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "Складская позиция была назначена заказу на продажу"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "Складская позиция установлена в другую деталь"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Складская позиция содержит другие детали"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "Складская позиция была назначена покупателю"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Складская позиция в производстве"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Серийные запасы нельзя объединить"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Дублирующие складские элементы"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "Складские позиции должны ссылаться на одну и ту же деталь"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "Коды статуса запаса должны совпадать"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "Складской элемент нельзя переместить, так как он отсутствует на складе"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "Отслеживание складского элемента"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Заметки к записи"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Результат теста складского элемента"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Для этого теста должно быть указано значение"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Для этого теста требуется загрузить вложения"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "Недопустимое значение для этого теста"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Результат тестирования"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Результат выполнения теста"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Вложение с результатом теста"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Заметки о тестировании"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Испытательное оборудование"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "Идентификатор испытательного оборудования, на котором выполнялось тестирование"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "Запущен"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Время начала тестирования"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Завершён"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Время окончания тестирования"
@@ -8913,214 +9193,234 @@ msgstr "Использовать размер упаковки при добав
msgid "Use pack size"
msgstr "Использовать размер упаковки"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Введите серийные номера для новых элементов"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Номер детали поставщика"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Просрочен"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Дочерние элементы"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Отслеживание элементов"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Введите количество складских позиций для сериализации"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "Складской элемент не предоставлен"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Количество не должно превышать доступный запас ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Целевое место хранения"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Серийные номера не могут присваиваться данной детали"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Серийные номера уже существуют"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Выберите складскую позицию для установки"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Количество для установки"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Введите количество элементов для установки"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Добавить запись к транзакции (необязательно)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Количество для установки должно быть не менее 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Складская позиция недоступна"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Выбранная деталь отсутствует в спецификации"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Количество для установки не должно превышать доступное количество"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Место назначения для демонтированного элемента"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Выберите деталь в которую будет преобразована складская позиция"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Выбранная деталь не является допустимым вариантом для преобразования"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Статус складской позиции"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Выберите складские позиции для изменения статуса"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Не выбрано ни одной складской позиции"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Места хранения"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Родительское местоположение запаса"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Деталь должна быть продаваемой"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Элемент распределён в заказ на продажу"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Элемент зарезервирован для заказа на производство"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Покупатель для назначения складских позиций"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Выбранная компания не является покупателем"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Записи о назначенных запасах"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Необходимо предоставить список складских позиций"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Заметки об объединении складских позиций"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Разрешить несоответствие поставщиков"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Разрешить объединение складских позиций с различными поставщиками"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Разрешить несоответствие статусов"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Разрешить объединение складских позиций с различными статусами"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Необходимо предоставить как минимум 2 складские позиции"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Нет изменений"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Первичный ключ складского элемента"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Складской элемент отсутствует на складе"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Складской элемент уже на складе"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Количество не должно быть отрицательным"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Заметки об изменении склада"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Объединить с существующим запасом"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Следующий серийный номер"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Предыдущий серийный номер"
@@ -9458,150 +9758,158 @@ 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 "Основная группа для пользователя"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Админ"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Заказы на закупку"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Заказы на продажу"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Заказы на возврат"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Логин"
diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po
index cbda4bbfa1..3b94426d42 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Slovak\n"
"Language: sk_SK\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr ""
@@ -104,13 +105,13 @@ msgstr ""
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr ""
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr ""
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr ""
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr ""
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po
index 0b16bdbc65..daf3ed6228 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Slovenian\n"
"Language: sl_SI\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Ni mogoče pretvoriti {original} v {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Podana napačna količina"
@@ -104,13 +105,13 @@ msgstr "Vnesi datum"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Zapiski"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Opis"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Opis (opcijsko)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Nadrejena izgradnja"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Del"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Dodeljeno meni"
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Neobvezno"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montaža"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Sledi"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testno"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Dodeljeno"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Nalog izgradnje"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr ""
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Nalogi izgradnje"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Sestava BOM ni bila potrjena"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Naveden mora biti odgovorni uporabnik ali skupina"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Referenca naloga izgradnje"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referenca"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Izberite del za izgradnjo"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referenca dobavnica"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Lokacija vira"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Ciljna lokacija"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Količina izgradenj"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Število postavk za izgradnjo"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Končane postavke"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Število postavk zaloge, ki so bile končane"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Status izgradnje"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Koda statusa izgradnje"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Številka serije"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Datum ustvarjenja"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Rok dokončanja"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Datom končanja"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "dokončal"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Izdal"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Uporabnik, ki je izdal nalog za izgradnjo"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Odgovoren"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Odgovorni uporabnik ali skupina za to naročilo"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Zunanja povezava"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Zunanja povezava"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Nalog izgradnje {build} je dokončan"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Nalog izgradnej dokončan"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Ni določena izgradnja"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Igradnja je že dokončana"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Izgradnja se ne ujema s nalogom izdelave"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Količina"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Količina za zalogo s serijsko številko mora biti 1"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Preveč zaloge je prestavljene"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Postavka zaloge"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Izvorna postavka zaloge"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Količina zaloge za prestavljanje za izgradnjo"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Inštaliraj v"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destinacija postavke zaloge"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Izgradnja"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Izhodni del se ne ujema s naročilom sestava"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Ta sestava je že zaključena"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "V teku"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Proizvodnja"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Preklicano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Končano"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Nalog izgradnje {build} je dokončan"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Nalog izgradnej dokončan"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Povezava"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Priloga"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Manjka datoteka"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Manjka zunanja povezava"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Izberite prilogo"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Poslano"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Izgubljeno"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Uporabniško ime"
diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po
index 3cf27a2e4b..158ccf1642 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Serbian (Latin)\n"
"Language: sr_CS\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Nije moguće konvertovati {original} u {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Isporučena nevažeća količina"
@@ -104,13 +105,13 @@ msgstr "Unesite datum"
msgid "Invalid decimal value"
msgstr "Neispravna decimalna vrednost"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Napomene"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Opis"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Opis (Opciono)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Status naloga"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Roditeljski proizvod"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Uključi varijante"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Uključi varijante"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Uključi varijante"
msgid "Part"
msgstr "Deo"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategorija"
@@ -605,7 +593,7 @@ msgstr "Kategorija"
msgid "Ancestor Build"
msgstr "Proizvod predaka"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "Dodeljeno meni"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Ne uključuj stablo"
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Potrošni materijal"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Opciono"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Sklapanje"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Praćeno"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Proverljivo"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Neizmirena narudžbina"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Alocirano"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Po narudžbini"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Nalog za izradu"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Lokacija"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Nalozi za izradu"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "BOM za sastavljanje nije potvrđeno"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Nalog za izradu se ne može kreirati za neaktivan deo"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Nalog za izradu se ne može kreirati za zaključan deo"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Odgovorni korisnik ili grupa mora biti određena"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Deo u nalogu za izradu ne može se izmeniti"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Reference naloga za pravljenje"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referenca"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Kratak opis izrade (nije obavezno)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Izaberi deo za izgradnju"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Referenca naloga za prodaju"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Lokacija izvora"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Izaberi lokaciju zaliha za ovu izgradnju (ostaviti prazno ako hoćete bilo koju lokaciju zaliha"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Lokacija odredišta"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Izaberi lokaciju gde će se završene stavke skladištiti"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Količina izgradnje"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Broj stavki za izgradnju"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Kompletirane stavke"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Broj stavki u zalihama koje su kompletirane"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Status izgradnje"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Kod statusa izgradnje"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Kod serije"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "datum kreiranja"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Datum ciljanog završetka"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Datum završetka"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "kompletirano od "
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "izdato od"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Korisnik koji je izdao nalog za izgradnju"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Odgovoran"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Spoljašnja konekcija"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Link za eksterni URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Prioritet izgradnje"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Prioritet ovog naloga za izgradnju"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Kod projekta"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Kod projekta za ovaj nalog za izgradnju"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Nije uspelo preuzimanje zadataka da bi se dovršila alokacija izgradnje"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Nalog za izgradnju {build} je kompletiran"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Nalog za izgradnju je kompletiran"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Nije određen izlaz izgradnje"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Izlaz izgradnje je već kompletiran"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Količina mora biti veća od nule"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Stavka porudžbine naloga za izgradnju"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Objekat izgradnje"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Objekat izgradnje"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Količina"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Potrebna količina za nalog za izgradnju"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Stavka zaliha je prealocirana"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Stavka zaliha"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Izvor stavke zaliha"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Količina zaliha za alociranje za izgradnju"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Ugradi u"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Stavka zaliha odredišta"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Nivo izgradnje"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Ime dela"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Izlaz izgradnje"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Ovaj izlaz izgradnje je već kompletiran"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Unesi količinu za izlaz izgradnje"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Brojčana količina potrebna za delove koji mogu da se prate"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serijski brojevi"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Unesi serijske brojeve za izlaz izgradnje"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Lokacija zaliha za izlaz izgradnje"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Automatski alociraj serijske brojeve"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Sledeći serijski brojevi već postoje ili su neispravni"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Lista izlaza izgradnje se mora obezbediti"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Lokacija zaliha za otpisane izlaze"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Odbaci alokacije"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Razlog za otpisane izlaz(e) izgradnje"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Lokacija za završene izlaze izgradnje"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Prihvati nekompletirane Alokacije"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Troši alocirane zalihe"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Troši bilo koje zalihe koje su već alocirane za ovu izgradnju"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Ukloni nekompletirane izlaze"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Nije dozvoljeno"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Izmesti bre završetka ovog naloga za izgradnju"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Sveukupne izdvojene zalihe"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Šta želite da radite sa viškom stavki u zalihama koje su dodeljene nalogu za izgradnju?"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Neke stavke zaliha su prealocirane"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Prihvati nealocirano"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za izgradnju"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Tražene zalihe nisu u potpunosti alocirane"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Prihvati nekompletirano"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Prihvati da je traženi broj izlaza izgradnje nekompletan"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Traženi broj izgradnji nije kompletan"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Nalog za izgradnju mora biti u stanju produkcije"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Nalog za izgradnju ima nekompletne izlaze"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Porudžbina izgradnje"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Izlaz izgradnje"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Izlaz izgradnje mora da referencira istu izgradnju"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Stavka porudžbine za izradu"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnju"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Stavka mora da bude u zalihama"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Dostupna količina ({q}) premašena"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Stavke alociranja se moraju odrediti"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Lokacija zaliha koje će da budu izvor delova (ostavi prazno ukoliko uzimate sa bilo koje lokacije)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Isključi lokaciju"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Zamenljive zalihe"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Stavke zaliha koje su na različitim lokacijama se mogu međusobno menjati"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Zamenske zalihe"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Dozvoli alociranje delova koji su zamenski"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Opcionalne stavke"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Alociraj opcione BOM stavke na nalog za izgradnju"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "Referenca BOM"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOM ID dela"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "BOM ime dela"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Deo dobavljača"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Alocirana količina"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Referenca izgradnje"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Ime kategorije dela"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Može da se prati"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Nasleđen"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Dozvoli varijante"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "BOM stavka"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "U proizvodnji"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Spoljašnje zalihe"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Dostupne zalihe"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Dostupne zamenske zalihe"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Dostupne varijante zaliha"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Na čekanju"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Proizvodnja"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Na čekanju"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Otkazano"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Gotovo"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Nalog za izgradnju {build} je kompletiran"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Nalog za izgradnju je kompletiran"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Potrebne su zalihe za nalog izgranje"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Prekoračeni nalog za izgradnju"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Nalog za izgradnju {bo} je sada prekoračen"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "je link"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "je datoteka"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Korisnik nema dozvolu da izbriše ovaj atačment"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Ažurirano"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Vreme poslednjeg ažuriranja"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Jedinstveni kod projekta"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Opis projekta"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Ključ za podešavanje"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Vrednost podešavanja"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "Izabrana vrednost nije ispravna opcija"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "Vrednost mora da bude boolean tipa"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Vrednost mora da bude integer tipa"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Vrednost mora biti broj"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Vrednost ne prolazi test ispravnosti"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Cena"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Krajnja tačka"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
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:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Token za pristup"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Tajna"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "Deljena tajna za HMAC"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "ID poruke"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Jedinstveni identifikator za ovu poruku"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Računar"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Računar koji je primio ovu poruku"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Zaglavlje"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Zaglavlje ove poruke"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Telo"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Telo ove poruke"
-#: common/models.py:1614
+#: common/models.py:1620
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:1625
msgid "Worked on"
msgstr "Radilo se na "
-#: common/models.py:1620
+#: common/models.py:1626
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:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Naslov"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Link"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "Objavljeno"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Autor"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Rezime"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Čitaj"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Da li je ova stavka vesti pročitana"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Datoteka slike"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Ciljni tip modela za ovu sliku"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "Ciljni ID modela za ovu sliku"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Posebna jedinica"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Simbol jedinice mora biti jedinstven"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "Ime jedinice mora da bude ispravan identifikator"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "Ime jedinice"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Simbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Opcioni simbol jedinice"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definicija"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Definicija jedinice"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Prilog"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Nedostaje datoteka"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Nedostaje eksterni link"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Izaberite datoteku za prilog"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Komentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Komentar priloga"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Datum učitavanja"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Datum kada je datoteka učitana"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Veličina datoteke"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Veličina datoteke u bajtovima"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Određen je neispravan tip modela za prilog"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Posebno stanje"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Posebna stanja"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Referentni status podešen"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Logički ključ"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Vrednost"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
msgid "Name of the state"
msgstr "Ime stanja"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiketa"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Boja"
-#: common/models.py:2145
+#: common/models.py:2321
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:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Model ovog stanja je povezan sa "
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Model mora biti izabran"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Ključ mora biti izabran"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Logički ključ mora biti izabran"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
msgid "Valid reference status class must be provided"
msgstr "Validna referenca statusa klase mora biti dostavljena"
-#: common/models.py:2192
+#: common/models.py:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Lista odabira"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Liste odabira"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Ime liste odabira"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Opis liste odabira"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Zaključano"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Da li je ova lista odabira zaključana?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Da li se ova lista odabira može koristiti?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Ekstenzija/dodatak za izvor"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Ekstenzija koja pruža listu odabira"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "String izvora"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Podrazumevani unos"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Kreirano"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Poslednje ažuriranje"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Unos liste odabira"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Unosi liste odabira"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Lista odabira kojoj ovaj unos pripada"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Vrednost ovog unosa liste odabira"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Naziv ovog unosa liste odabira"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Opis ovog unosa liste odabira"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Da li je unos ove liste odabira aktivan?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Šablon parametra"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Checkbox parametri ne mogu imati jedinice"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Checkbox parametri ne mogu imati izbore"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Izbori moraju biti jedinstveni"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Ime šablona parametra mora biti jedinstveno"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Naziv parametra"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Jedinice"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Fizičke jedinice za ovaj parametar"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Opis parametra"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Polje za potvrdu"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Da li je ovaj parametar checkbox?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Izbori"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "Lista izbora za ovaj parametar"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Omogućen"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "Nije validan izbor za vrednost parametra"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Podaci"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Beleška"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Opciona beleška"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Skeniranje bar koda"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Podaci bar koda"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "Korisnik koji je skenirao bar kod"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Vremenski trag"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Datum i vreme skeniranja bar koda"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Kontekst"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Kontekst podataka za skeniranje bar koda"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Odgovor"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Rezultat"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Da li je skeniranje bar koda bilo uspešno?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Stavke primljene"
@@ -2451,25 +2491,25 @@ msgstr "Ključne reči argumenata"
msgid "Task keyword arguments"
msgstr "Ključne reči argumenata zadatka"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Tip modela"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Lista odabira je zaključana"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dani"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
msgid "Require schema specification when validating URLs"
msgstr "Traži specifikaciju za validaciju URL-ova"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "Ažuriraj interval provere"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Automatsko pravljenje rezervne kopije"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Automatski interval pravljenja rezervnih kopija"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Interval brisanja zadataka"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Interval brisanja evidencije grešaka"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Interval brisanja obaveštenja"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Podrška za bar kod"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Uskladišti rezultate bar koda"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Maksimalan broj skeniranja bar koda"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Kašnjenje unosa bar koda"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Vreme kašnjena obrađivanja ulaza bar koda"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Podrška za bar kod veb kameru"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Prikaži podatke bar koda"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Dodatak za generisanje bar koda"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Revizije dela"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "Omogući polje za reviziju dela"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "Jedino revizija sastavljanja "
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "Dozvoli jedino revizije za sastavne delove"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "Dozvoli brisanje iz sastavljanja"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "Interni broj dela regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Dozvoli duple IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Dozvoli izmenu IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Kopiraj BOM podatke dela"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Kopiraj podatke parametara dela"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Kopiraj podatke testiranja dela"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kopiraj šablone parametara kategorije"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Podrazumevano je da su delovi šabloni"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponenta"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Može da se kupi"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Može da se proda"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "podrazumevano je da delovi mogu da se prodaju"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuelni"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Podrazumevano je da su delovi virtuelni"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Prikaži povezane delove"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Prikaži povezane delove za deo"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "Inicijalni podaci zaliha"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Podaci inicijalnog dobavljača"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Format prikazivanja imena dela"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Podrazumevana ikona za kategoriju dela"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Minimalan broj decimalnih mesta za cene"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Maksimalan broj decimalnih mesta za cene"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Koristi cene dobavljača"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Premosti istorijat kupovina"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Koristi cene stavki u zalihama"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Godina cena stavki u zalihama"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Koristi drugačije cene"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Samo aktivne varijante"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Vremenski period za ponovno određivanje cena"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Interne cene"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Omogući interne cene za delove"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Premošćavanje internih cena"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Omogući štampanje etiketa"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI slike etikete"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Omogući izveštaje"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Omogući generisanje izveštaja"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Mod otklanjanja grešaka"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Greške evidencije izveštaja"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Zahtevaj jedinice parametara"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Globalno jedinstveni serijski brojevi"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Obriši ispražnjene zalihe"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Šablon koda serije"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Datum isteka zaliha"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Omogući funkcionalnost isteka zaliha"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Prodaja isteklih zaliha"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Dozvoli prodaju isteklih zaliha"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Vreme zastarevanja zaliha"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Izrada sa isteklim zalihama"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Dozvoli izradu sa isteklim zalihama"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Vlasnička kontrola zaliha"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Podrazumevana ikonica lokacije zaliha"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Prikaži instalirane stavke sa zaliha"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Proveri spisak materijala pri instalaciji stavki"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Dozvoli transfer van zaliha"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Referentni šablon naloga za izradu"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Potreban aktivan deo"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Potreban zaključan deo"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Potreban validan spisak materijala"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Potrebno završavanje podređenih naloga"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Blokiraj dok ne prođe test"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Spreči završavanje naloga za izradu pre uspešnog završetka svih testova"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Omogući naloge za vraćanje"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Omogući funkcionalnost vraćana u korisničkom interfejsu"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Referentni šablon naloga za vraćanje"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "Potreban šablon pri generisanju referentnog polja naloga za vraćanje"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Izmeni završene naloge za vraćanje"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Dozvoli izmenu naloga za vraćanje nakon što su završeni"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Referentni šablon naloga za prodaju"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Potreban šablon pri generisanju referentnog polja naloga za prodaju"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Podrazumevana isporuka naloga za prodaju"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Omogućava kreiranje podrazumevane isporuke sa nalozima za prodaju"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Izmeni završene naloge za prodaju"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Dozvoli izmenu naloga za prodaju nakon što su isporučeni ili završeni"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Označi isporučene naloge kao završene"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Nalozi za prodaju označeni kao isporučeni će automatski biti završeni, zaobilazeći status isporučen"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Referentni šablon naloga za kupovinu"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Izmeni završene naloge za kupovinu"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Automatski završi naloge za kupovinu"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Omogući zaboravljenu lozinku"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Omogući registraciju"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Omogući SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "Omogući SSO na stranicama za prijavljivanje"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "Omogući SSO registraciju"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "Omogući SSO sinhronizaciju grupa"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "SSO ključ grupe"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "Mapiranje SSO grupa"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "Ukloni grupe van SSO"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Email neophodan"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Automatski popuni SSO korisnike"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Email dva puta"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Lozinka dva puta"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Dozvoljeni domeni"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Grupa pri registrovanju"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Nametni MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "Korisnici moraju koristiti multifaktorsku bezbednost"
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "Proveri plugine pri pokretanju"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Proveri ažuriranja pluginova"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "Omogući URL integraciju"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "Omogući da pluginovi dodaju URL rute"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "Omogući integraciju u navigaciju"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Omogući integraciju pluginova u navigaciju"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Omogući integraciju aplikacija"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Omogući pluginovima da dodaju aplikacije"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Omogući integraciju planiranja"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Omogući integraciju događaja"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Omogući integraciju interfejsa"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Ne uključuj eksterne lokacije"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Period automatskog popisa"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "Prikaži puna imena korisnika"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Omogući podatke test stanica"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Primaj izveštaje o greškama"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Primaj notifikacije za sistemske greške"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Poslednje korišćene mašine za štampanje"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Sačuvaj poslednju korišćenu mašinu za štampanje za korisnika"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Nije dostavljen tip modela priloga"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Nevažeći tip modela priloga"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Minimalno mesta ne sme biti veće od maksimalno mesta"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Maksimalno mesta ne sme biti manje od minimalno mesta"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Prazan domen nije dozvoljen."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Nevažeće ime domena: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Vrednost mora biti napisana velikim slovima"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Vrednost mora biti važeći identifikator promenljive"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Proizvođač"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Kompanija"
@@ -4050,8 +4193,8 @@ msgstr "Broj telefona kontakta"
msgid "Contact email address"
msgstr "Email adresa kontakta"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adrese"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Osnovni deo"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "Broj dela proizvođača"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Broj dela proizvođača"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Dobavljač"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Jedinica za držanje dobavljačevih zaliha"
@@ -4282,16 +4425,16 @@ msgstr "URL za link dela eksternog dobavljača"
msgid "Supplier part description"
msgstr "Opis dela dobavljača"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "osnovni trošak"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Pakovanje"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "više"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Važeće"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Nepoznato"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Referenca naloga"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Izvanredno"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Ima šifru projekta"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Kreirano do strane"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Kreirano pre"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Kreirano nakon"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Krajnji datum pre"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Krajnji datum nakon"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Ima cenu"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Završen pre"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Završen nakon"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Nalog"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Nalog završen"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Interni deo"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Nalog na čekanju"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Završeno"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Ima isporuku"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Nalog za vraćanje"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Ukupna cena"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Totalna cena ovog naloga"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Valuta naloga"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Kontakt se ne poklapa sa izabranom kompanijom"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Opis naloga (opciono)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Link ka eksternoj stranici"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Ciljani datum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Očekivani datum za isporuku. Nalog će biti zastareo nakon ovog datuma."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Datum izdavanja"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Datum kada je nalog izdat"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Korisnik ili grupa odgovorni za ovaj nalog"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Lice za kontakt za ovaj nalog"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Adresa kompanije za ovaj nalog"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Status naloga za kupovinu"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Kompanija od koje su stavke naručene"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Referenca dobavljača"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Referentni kod dobavljača naloga"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "primljeno od strane"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Datum kada je nalog završen"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Odredište"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Odredište za primljene stavke"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Dobavljač dela se mora poklapati sa dobavljačem naloga za kupovinu"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Stavka porudžbine se ne poklapa sa nalogom za kupovinu"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Količina mora biti pozitivan broj"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Kompanija kojoj se prodaju stavke"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Status naloga za prodaju"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Referenca mušterije"
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Referentni kod mušterijinog naloga"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Datum isporuke"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "isporučeno od strane"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Nalog je već završen"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Nalog je već otkazan"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
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:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Količina stavki"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Referenca stavke porudbžine"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Beleške stavke porudbžine"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Opis stavke porudžbine (opciono)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Dodatni kontekst za ovu porudžbinu"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Cena jedinice"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Stavka porudžbine naloga za kupovinu"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Deo dobavljača se mora poklapati sa dobavljačem"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Deo dobavljača"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Primljeno"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "Broj primljenih stavki"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Kupovna cena"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Kupovna cena jedinice"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "Dodatna porudbžina naloga za kupovinu"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Stavka porudžbine naloga za prodaju"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Prodajna cena"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Prodajna cena jedinice"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Poslato"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Isporučena količina"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Isporuka naloga za prodaju"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Datum isporuke"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Datum dostavljanja"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Datum dostavljanja isporuke"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Provereno od strane"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Isporuka"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Broj isporuke"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Broj praćenja"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Informacije o praćenju isporuke"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Broj računa"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Referentni broj za dodeljeni račun"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Isporuka je već poslata"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Isporuka nema alocirane stavke sa zaliha"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "Dodatne porudbžine naloga za prodaju"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Alokacije naloga za prodaju"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Stavka sa zaliha nije dodeljena"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Porudbžina"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Referenca isporuke naloga za prodaju"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Stavka"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Izaberi stavku sa zaliha za alokaciju"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Unesi količinu za alokaciju zaliha"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Referenca naloga za vraćanje"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Kompanija čije stavke su vraćene"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "Status naloga za vraćanje"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "Vrati stavku porudbžine"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Stavka sa zaliha mora biti određena"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "Količina vraćanja je premašila količinu zaliha"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
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:3135
msgid "Select item to return from customer"
msgstr "Izaberi stavku za vraćanje od mušterije"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Primljeno datuma"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Ishod"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Ishod za ovu stavku porudžbine"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Doda"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "ID naloga"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "ID naloga koji će se duplirati"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Kopiraj porudžbine"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Kopiraj stavke porudžbine sa originalnog naloga"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Kopiraj dodatne porudžbine"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopiraj parametre"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Stavke porudbžine"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Završene porudbžine"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Dupliraj nalog"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "Odredi opcije za dupliranje ovog naloga"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "Nevažeći ID naloga"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Naziv dobavljača"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Nalog ne može biti otkazan"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Nalog ima nepotpune stavke porudžbine"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Nalog nije otvoren"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Automatske cene"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Valuta kupovne cene"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Spoj stavke"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "Jedinica za praćenje zaliha"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Interni broj dela"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Interni naziv dela"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Deo dobavljača mora biti određen"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Nalog za kupovinu mora biti određen"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu"
-#: order/serializers.py:785
+#: order/serializers.py:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Stavka porudbžine"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "Izaberi odredišnu lokaciju za primljene stavke"
-#: order/serializers.py:862
+#: order/serializers.py:864
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:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "Datum isteka"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
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:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Dodatne beleške za nadolazeće stavke sa zaliha"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Bar kod"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Skeniran bar kod"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Bar kod je već u upotrebi"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Stavke porudžbine moraju biti dostavljene"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Odredišna lokacija mora biti određena"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Isporuke"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Završene isporuke"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Valuta prodajne cene"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Alocirane stavke"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Nisu dostavljeni detalji isporuke"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Količina mora biti pozitivna"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Unesi serijske brojeve za alokaciju"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Isporuka je već isporučena"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Isporuka nije povezana sa ovim nalogom"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Sledeći serijski brojevi su nedostupni"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "Stavka porudžbine naloga za vraćanje"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "Stavka porudžbine je već primljena"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "Količina za vraćanje"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Valuta cene porudžbine"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Izgubljeno"
@@ -5661,6 +5879,11 @@ msgstr "Refundiraj"
msgid "Reject"
msgstr "Odbij"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Izdato"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Istekli nalozi za kupovinu"
@@ -5696,7 +5919,7 @@ msgstr "Označeno zvezdicom"
msgid "Filter by starred categories"
msgstr "Filtiraj po kategorijama označenim zvezdicom"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Dubina"
@@ -5704,7 +5927,7 @@ msgstr "Dubina"
msgid "Filter by category depth"
msgstr "Filtriraj po dubini kategorije"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Vrhovni"
@@ -5712,7 +5935,7 @@ msgstr "Vrhovni"
msgid "Filter by top-level categories"
msgstr "Filtriraj po vrhovnim kategorijama"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Kaskadno"
@@ -5732,75 +5955,79 @@ msgstr "Filtriraj po nadređenoj kategoriji"
msgid "Exclude sub-categories under the specified category"
msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Ima rezultate"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Je revizija"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Ima revizije"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "Spisak materijala validan"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Deo sklopa se može testirati"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Deo komponente se može testirati"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Koristi"
@@ -5809,11 +6036,11 @@ msgstr "Koristi"
msgid "Part Category"
msgstr "Kategorija dela"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Podrazumevana lokacija"
msgid "Default location for parts in this category"
msgstr "Podrazumevana lokacija za delove ove kategorije"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Strukturno"
@@ -5837,12 +6064,12 @@ msgstr "Podrazumevane ključne reči"
msgid "Default keywords for parts in this category"
msgstr "Podrazumevane ključne reči za delove ove kategorije"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikonica"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikonica (opciono)"
@@ -5862,984 +6089,1028 @@ msgstr "Podrazumevana vrednost"
msgid "Default Parameter Value"
msgstr "Podrazumevana vrednost parametra"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Prodaj više"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Valuta korišćena za vršenje proračuna o cenama"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimalna vrednost spiska materijala"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Minimalna vrednost komponenti delova"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maksimalna vrednost spiska materijala"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Maksimalna vrednost komponenti delova"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimalna kupovna vrednost"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimalna istorijska kupovna vrednost"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maksimalna kupovna vrednost"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maksimalna istorijska kupovna vrednost"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimalna interna cena"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Minimalna cena bazirana na internim sniženjima cena"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maksimalna interna cena"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Maksimalna vrednost bazirana na internim sniženjima cena"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimalna cena dobavljača"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Minimalna cena dela od eksternih dobavljača"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maksimalna cena dobavljača"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Maksimalna cena dela od eksternih dobavljača"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimalna vrednost varijanti"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Izračunata minimalna vrednost varijanti delova"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maksimalna vrednost varijanti"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Izračunata maksimalna vrednost varijanti delova"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimalna vrednost"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Promeni minimalnu vrednost"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maksimalna vrednost"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Promeni maksimalnu vrednost"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Ukupna izračunata minimalna vrednost"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Ukupna izračunata maksimalna vrednost"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimalna prodajna cena"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maksimalna prodajna cena"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimalna prodajna vrednost"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimalna istorijska prodajna cena"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maksimalna prodajna vrednost"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maksimalna istorijska prodajna cena"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Deo za popis"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Broj stavki"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Broj individualnih unosa zaliha u vreme popisa"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Ukupne dostupne zalihe za vreme popisa"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Datum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Datum kada je izvršen popis"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimalna vrednost zaliha"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Procenjena minimalna vrednost trenutnih zaliha"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maksimalna vrednost zaliha"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Procenjena maksimalna vrednost trenutnih zaliha"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Smanjenje prodajne cene dela"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Šablon testa dela"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Naziv testa"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Unesi naziv za ovaj test"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Test ključ"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Pojednostavljen ključ za test"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Opis testa"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Unesi opis za ovaj test"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Da li je ovaj test omogućen?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Neophodno"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Da li je neophodno da ovaj test prođe?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Zahteva vrednost"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Zahteva prilog"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "Validni izbori za ovaj test (razdvojeni zapetom)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
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:3956
+#: part/models.py:4080
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:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Izaberi nadređeni deo"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Pod-deo"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Izaberi deo koji će biti korišćen u spisku materijala"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Ova stavka sa spiska materijala je opciona"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Referenca stavke sa spiska materijala"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Beleške stavki sa spiska materijala"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Suma"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Suma spiska materijala"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Validirano"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Ova stavka sa spiska materijala je validirana"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Biva nasleđeno"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
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:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Zamenski deo mora biti određen"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Zamenska stavka sa spiska materijala"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Nadređena stavka sa spiska materijala"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Zamenski deo"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Deo 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Deo 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Izaberi povezan deo"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Beleška za ovu relaciju"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Identična veza već postoji"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Nadređena kategorija"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Nadređena kategorija dela"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Podkategorije"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Rezultati"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Valuta kupovine za ovu stavku sa zaliha"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Originalni deo"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Izaberi originalni deo za duplikaciju"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopiraj sliku"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Kopiraj sliku sa originalnog dela"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "Kopiraj spisak materijala"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "Kopiraj spisak materijala sa originalnog dela"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "Kopiraj parametarske podatke sa originalnog dela"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Kopiraj beleške"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Kopiraj beleške sa originalnog dela"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Inicijalna količina zaliha"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Inicijalna lokacija zaliha"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Broj dela proizvođača"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "Izabrana kompanija nije validan dobavljač"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "Izabrana kompanija nije validan proizvođač"
-#: part/serializers.py:529
+#: part/serializers.py:548
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:555
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:840
msgid "Category Name"
msgstr "Naziv kategorije"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Izrađivanje"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Stavke sa zaliha"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revizije"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Nealocirane zalihe"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Varijante zaliha"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Dupliraj deo"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Kopiraj inicijalne podatke od drugog dela"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Početne zalihe"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Kreiraj deo sa početnom količinom zaliha"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Informacije o dobavljaču"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Kopiraj parametre kategorije"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Postojeća slika"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Ime fajla postojeće slike dela"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Fajl sa slikom ne postoji"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "Validiraj ceo spisak materijala"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Može se izgraditi"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Minimalna cena"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "Izmeni izračunatu vrednost za minimalnu cenu"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "Minimalna valuta cene"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maksimalna cena"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "Izmeni izračunatu vrednost maksimalne cene"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "Maksimalna valuta cene"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Ažuriraj"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Ažuriraj cene za ovaj deo"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Izaberi nadređeni sklop"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Izaberi komponentu dela"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "Izaberi deo sa kog će se kopirati spisak materijala"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Ukloni postojeće podatke"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Uključi nasleđeno"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Preskoči nevažeće vrste"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Kopiraj zamenske delove"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Paket plugin"
msgid "Plugin"
msgstr "Plugin"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Nije pronađen autor"
@@ -8021,7 +8292,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"
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Materijali neophodni"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Slika dela"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Izdato"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Potrebno za"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Serijski broj"
@@ -8292,7 +8560,7 @@ msgstr "Izveštaj sa testa za stavku sa zaliha"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Instalirane stavke"
@@ -8325,6 +8593,10 @@ msgstr "Nema rezultata (neophodno)"
msgid "No result"
msgstr "Nema rezultata"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "part_image tag zahteva instancu dela"
msgid "company_image tag requires a Company instance"
msgstr "company_image tag zahteva instancu kompanije"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Filtriraj po dubini lokacije"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Filtriraj po nadređenim lokacijama"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Uključi podlokacije u filtriranim rezultatima"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Nadređena lokacija"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Filtriraj po nadređenoj lokaciji"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Ime dela"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Ime dela sadrži"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Ime dela (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Interni deo broja"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Interni deo broja sadrži (osetljivo na velika i mala slova)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Interni broj dela (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Minimalne zalihe"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Maksimalne zalihe"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Statusni kod"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Eksterna lokacija"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Potrošeno od strane naloga za izradu"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Instalirano u drugu stavku sa zaliha"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Stablo dela"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Ažurirano pre"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Ažurirano nakon"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Popis pre"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Popis nakon"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Datum isteka pre"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Datum isteka nakon"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Zastarelo"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Količina je neophodna"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Validan deo mora biti dosavljen"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Dati dobavljač ne postoji"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Deo dobavljača ima definisanu veličinu pakovanja, ali fleg use_pack_size nije postavljen"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Serijski brojevi ne mogu biti dostavljeni za deo koji nije moguće pratiti"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Tip lokacije zaliha"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Tipovi lokacija zaliha"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Lokacija zaliha"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Lokacija zaliha"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Vlasnik"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Izaberi vlasnika"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Eksterna"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Ovo je eksterna lokacija zaliha"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Tip lokacije"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Tip lokacija zaliha za ovu lokaciju"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Deo mora biti određen"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Stavka ne može da pripada samoj sebi"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Nadređena stavka sa zaliha"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Osnovni deo"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Pakovanje u kom je ova stavka sa zaliha"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Instalirano u"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
msgid "Serial number for this item"
msgstr "Serijski broj za ovu stavku"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Šifra ture za ovu stavku sa zaliha"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Količina zaliha"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Izvorna gradnja"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Nalog za ovu stavku sa zaliha"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Potrošeno od strane"
-#: stock/models.py:1139
+#: stock/models.py:1164
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:1173
msgid "Source Purchase Order"
msgstr "Izvorni nalog za kupovinu"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Nalog za kupovinu za ovu stavku sa zaliha"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Odredište naloga za prodaju"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Obriši kad je potrošeno"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
msgid "Single unit purchase price at time of purchase"
msgstr "Cena kupovine jedne jedinice u vreme kupovine"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Konvertovano u deo"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
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:1960
msgid "Quantity must be integer"
msgstr "Količina mora biti ceo broj"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr "Serijski brojevi moraju biti dostavljeni kao lista"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Količine se ne poklapaju sa serijskim brojevima"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Test šablon ne postoji"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
msgid "Stock item is installed in another item"
msgstr "Stavka sa zaliha je instalirana u drugu stavku"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "Stavka sa zaliha sadrži druge stavke"
-#: stock/models.py:2081
+#: stock/models.py:2142
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:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "Stavka sa zaliha je trenutno u produkciji"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "Serijalizovane zalihe se ne mogu spojiti"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Dupliraj stavke sa zaliha"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
msgid "Stock status codes must match"
msgstr "Statusne šifre zaliha moraju da se poklapaju"
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr "Praćenje stavke sa zaliha"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Ulazne beleške"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "Rezultat testa stavke sa zaliha"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "Vrednost mora biti dostavljena za ovaj test"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "Prilog mora biti dostavljen za ovaj test"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "Nevažeća vrednost za ovaj test"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Rezultat testa"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Vrednost završetka testa"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "Prilog uz test rezultat"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "Beleške sa testa"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "Stanica za testiranje"
-#: stock/models.py:3087
+#: stock/models.py:3160
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:3166
msgid "Started"
msgstr "Započeto"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "Vreme početka testa"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "Završeno"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "Vreme završetka testa"
@@ -8913,214 +9193,234 @@ msgstr "Koristi pakovanja prilikom dodavanja: količina je definisana brojem pak
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Unesi serijske brojeve za nove stavke"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Dobavljački broj dela"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "Isteklo"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Podređene stavke"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "Stavke za praćenje"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Nabavna cena ove stavke, po jedinici ili pakovanju"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Unesi broj stavka sa zaliha za serijalizaciju"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Odredišna lokacija zaliha"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Serijski brojevi ne mogu biti dodeljeni ovom delu"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Serijski broj već postoji"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Izaberi stavku za instaliranje"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Količina za instaliranje"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Izaberi količinu stavki za instaliranje"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Dodaj beleške transakcija (opciono)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Količina za instaliranje mora biti najmanje 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Stavka je nedostupna"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Izabrani deo nije na spisku materijala"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Količina za instaliranje ne sme preći dostupnu količinu"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Odredišna lokacija za deinstalirane stavke"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Izaberi deo u koji će se konvertovati stavka"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Izabrani deo nije validna opcija za konverziju"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Ne može se konvertovati stavka sa dodeljenim delom dobavljača"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Statusni kod stavke sa zaliha"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Izaberi stavke kojoj će se promeniti status"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Nije izabrana stavka"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Podlokacije"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Lokacija nadređenih zaliha"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Deo mora biti za prodaju"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Stavka je alocirana nalogu za prodaju"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Stavka je alocirana nalogu za izradu"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Mušterija kojoj će se dodeliti stavke sa zaliha"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Izabrana kompanija nije mušterija"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Beleške dodeljivanja zaliha"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Lista stavki mora biti dostavljena"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Beleške spajanja zaliha"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Dozvoli neslagajuće dobavljače"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Dozvoli spajanje stavki sa različitim delovima dobavljača"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Dozvoli neslagajući status"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Dozvoli spajanje stavki sa različitim statusnim kodovima"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Bar dve stavke moraju biti dostavljene"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Nema promena"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Vrednost primarnog ključa stavke"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Stavka nije na zalihama"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Beleške transakcija zaliha"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Nalozi za kupovinu"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Nalozi za prodaju"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Nalozi za vraćanje"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Korisničko ime"
diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po
index 990f0e731f..2ef16045bd 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Kunde inte konvertera {original} till {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Ogiltigt antal angivet"
@@ -104,13 +105,13 @@ msgstr "Ange datum"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Anteckningar"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Beskrivning"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Beskrivning (valfritt)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Valuta"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Orderstatus"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Föregående tillverkning"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Inkludera varianter"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Inkludera varianter"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Inkludera varianter"
msgid "Part"
msgstr "Del"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategori"
@@ -605,7 +593,7 @@ msgstr "Kategori"
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Tillverkningen måste avbrytas innan den kan tas bort"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Valfri"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Spårad"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Testbar"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Allokerad"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Konsumerad"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Byggorder"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Plats"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Byggordrar"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Tillverknings order referens"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referens"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Välj del att tillverka"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Försäljningsorderreferens"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Källa Plats"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Destinationsplats"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Välj plats där de färdiga objekten kommer att lagras"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Tillverkat antal"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Antal lagerobjekt att bygga"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Slutförda objekt"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Antal lagerposter som har slutförts"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Tillverknings status"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Tillverkning statuskod"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Batchkod"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Skapad"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Datum för slutförande"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Slutförandedatum"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "slutfört av"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Utfärdad av"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Användare som utfärdade denna tillverknings order"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Ansvarig"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Extern länk"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Länk till extern URL"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Projektkod"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Tillverknings order {build} har slutförts"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "En tillverknings order har slutförts"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Ingen byggutgång angiven"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Byggutgång är redan slutförd"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Byggutgång matchar inte bygg order"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Bygg objekt"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Bygg objekt"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Antal"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Antal måste vara 1 för serialiserat lager"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Lagerposten är överallokerad"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Artikel i lager"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Källa lagervara"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Lagersaldo att allokera för att bygga"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Installera till"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Destination lagervara"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Delnamn"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Bygg utdata"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Byggutdata matchar inte överordnad version"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Serienummer"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Ange serienummer för att tillverkade produkter"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "En lista över tillverkade produkter måste anges"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Lagerplats för skrotade produkter"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Ignorera alla lagerallokeringar för skrotade produkter"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Plats för färdiga produkter"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Slutför utfall om lager inte har tilldelats fullt ut"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Ta bort ofullständiga produkter"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Ta bort eventuella produkter som inte har slutförts"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Acceptera ofullständig"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Acceptera att det önskade antalet produkter som inte har slutförts"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Tillverknings ordern är ofullständig"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Spårbar"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Ärvd"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Tillåt varianter"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Väntar"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Produktion"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Avbruten"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Slutför"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Tillverknings order {build} har slutförts"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "En tillverknings order har slutförts"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Är länk"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Är fil"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Uppdaterad"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Uppdaterad av"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Unik projektkod"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Projektbeskrivning"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Pris"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Hemlig"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Meddelande-ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Värd"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Id"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Titel"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: 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:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Sammanfattning"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Läs"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Bildfil"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Symbol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Definition"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Bilaga"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Saknad fil"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Extern länk saknas"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Modelltyp"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Välj fil att bifoga"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Kommentar"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Uppladdningsdatum"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Filstorlek"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Logisk nyckel"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Värde"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etikett"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Färg"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Modell"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Låst"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Källsträng"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Skapad"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Senast uppdaterad"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parametermall"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Kryssruta"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Val"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Aktiverad"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Data"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Streckkodsdata"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Tidsstämpel"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Sammanhang"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Svar"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Resultat"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Ett fel inträffade"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "E-postmeddelande"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Bekräftad"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Inget svar"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "Tråd-ID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "Tråd"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "E-posttrådar"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Modelltyp"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "dagar"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "Ladda ner från URL"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Stöd för streckkoder"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Komponent"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "Virtuell"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Delar är virtuella som standard"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Visa relaterade delar"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "Visa relaterade delar för en del"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "Visningsformat för delnamn"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "Formatera för att visa artikelnamnet"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "Interna priser"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Aktivera etikettutskrift"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "Aktivera etikettutskrift från webbgränssnittet"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "Etikettbild DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "Aktivera rapporter"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Aktivera generering av rapporter"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Debugläge"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
msgid "Default page size for PDF reports"
msgstr "Standard sidstorlek för PDF-rapporter"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Förhindra produktion från att slutföras tills alla nödvändiga tester är klara"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr "Aktivera registrering"
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr "Aktivera SSO"
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
msgstr ""
+#: common/setting/system.py:992
+msgid "Enable registration"
+msgstr "Aktivera registrering"
+
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
+msgstr "Aktivera SSO"
+
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
-msgstr ""
-
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
-msgstr "Tillåtna domäner"
-
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1035
-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."
+#: common/setting/system.py:1028
+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:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
+msgstr ""
+
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
-msgstr ""
+#: common/setting/system.py:1066
+msgid "Allowed domains"
+msgstr "Tillåtna domäner"
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Ogiltigt domännamn: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Tillverkare"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Företag"
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Kontakt"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adress"
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Basdel"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "MPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Leverantör"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr "Fel"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Giltig"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Okänd"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Har projektkod"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Skapad av"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Skapad efter"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Intern del"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Slutförd"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Startdatum"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Måldatum"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Status"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Mål"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Skickad"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Leveransdatum"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Kontrollerad av"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Fakturanummer"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "Rad"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Kopiera parametrar"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Leverantörsnamn"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Streckkod"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Förlorad"
@@ -5661,6 +5879,11 @@ msgstr "Återbetala"
msgid "Reject"
msgstr "Avvisa"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Djup"
@@ -5704,7 +5927,7 @@ msgstr "Djup"
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Har resultat"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Är variant"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Använder"
@@ -5809,11 +6036,11 @@ msgstr "Använder"
msgid "Part Category"
msgstr "Delkategori"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Ikon"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Ikon (valfritt)"
@@ -5862,984 +6089,1028 @@ msgstr "Standardvärde"
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Datum"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr "Validerad"
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr "Validerad"
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Del 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Del 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Underkategorier"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Resultat"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Originaldel"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Kopiera bild"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Kopiera test"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "Kategorinamn"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revisioner"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Uppdatera"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr "Hoppa över ogiltiga rader"
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr "Hoppa över ogiltiga rader"
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Delbild"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Serienummer"
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr "Inga resultat"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Statuskod"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Extern plats"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Uppdaterad efter"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Ägare"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Välj ägare"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Platstyp"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Grunddel"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "Konverterad till del"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Testresultat"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "Startad"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Ingen förändring"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Admin"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Användarnamn"
diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po
index 9ac51a853f..139dbb35cc 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Thai\n"
"Language: th_TH\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr ""
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "ปริมาณสินค้าไม่ถูกต้อง"
@@ -104,13 +105,13 @@ msgstr "ป้อนวันที่"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "หมายเหตุ"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "คำอธิบาย"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "ต้องเป็นตัวเลข"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "สกุลเงิน"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr ""
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr ""
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr ""
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr ""
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "สถานที่"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr ""
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "ออกโดย"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "จำนวนต้องมีค่ามากกว่า 0"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr ""
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr ""
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr ""
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "อยู่ระหว่างดำเนินการ"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "ยกเลิกแล้ว"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "สำเร็จแล้ว"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr ""
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr ""
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "ลิงก์"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "ไฟล์แนบ"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "ไม่พบไฟล์"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "เลือกไฟล์ที่ต้องการแนบ"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "ความคิดเห็น"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr ""
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr ""
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr ""
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr ""
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr ""
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr ""
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr ""
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1001
-msgid "Email required"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
-msgstr ""
-
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr ""
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr ""
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr ""
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr ""
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr ""
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "สำเร็จแล้ว"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "สถานะ"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "จัดส่งแล้ว"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "สูญหาย"
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr ""
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr ""
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr ""
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr ""
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr ""
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr ""
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr ""
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr ""
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr ""
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr ""
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po
index 847c9bc4b1..57547788c7 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "{original} birimi {unit} birimine dönüştürülemedi"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Geçersiz veri sağlandı"
@@ -104,13 +105,13 @@ msgstr "Tarih giriniz"
msgid "Invalid decimal value"
msgstr "Geçersiz ondalık değer"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Notlar"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Açıklama"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
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:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Para birimi"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Sipariş Durumu"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Üst Yapım İşi"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "Varyantları Dahil Et"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "Varyantları Dahil Et"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "Varyantları Dahil Et"
msgid "Part"
msgstr "Parça"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Kategori"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Bana atandı"
@@ -653,374 +641,365 @@ 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:241
msgid "Min Date"
msgstr "En yakın tarih"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "Maksimum Tarih"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "Ağacı Hariç Tut"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "Üretim silinemeden önce iptal edilmelidir"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Sarf Malzemesi"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "İsteğe Bağlı"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Montaj"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "İzlenen"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Test Edilebilir"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "Sipariş Açık"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Tahsis Edildi"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Tüketildi"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Siparişte"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Üretim Emri"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Konum"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "Çıktı"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "Çıktı stok kalemi ID'sine göre filtrele. Takılmamış üretim kalemlerini bulmak için ‘null’ kullan."
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Üretim Emirleri"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Montaj BOM listesi henüz doğrulanmadı"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Pasif bir parça için üretim emri oluşturulamaz"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Kilidi açılmış bir parça için üretim emri oluşturulamaz"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "Harici üretim emirleri yalnızca satın alınabilir parçalar için yerine getirilebilir"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Sorumlu kullanıcı veya grup belirtilmelidir"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Üretim emri parçası değiştirilemez"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Üretim Emri Referansı"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Referans"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Üretimin kısa açıklaması (isteğe bağlı)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "Bu üretimin tahsis edildiği üretim emri"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Üretilecek parçayı seçin"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Satış Emri Referansı"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "Bu üretimin tahsis edildiği satış siparişi"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Kaynak Konum"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Bu üretim için stok alınacak konumu seçin (herhangi bir stok konumundan amak için boş bırakın)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "Harici Üretim"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "Bu üretim emri harici olarak tamamlanmıştır"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Hedef Konum"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Üretim Miktarı"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Üretilecek stok kalemlerinin sayısı"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Tamamlanmış ögeler"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Tamamlanan stok kalemlerinin sayısı"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Üretim Durumu"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Üretim durum kodu"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Sıra numarası"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Oluşturulma tarihi"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "Üretim başlangıç tarihi"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "Bu üretim emri için planlanan başlangıç tarihi"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Hedef tamamlama tarihi"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Tamamlama tarihi"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "tamamlayan"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Düzenleyen"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "Bu üretim emrini düzenleyen kullanıcı"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Sorumlu"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Harici Bağlantı"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Harici URL'ye bağlantı"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Üretim Önceliği"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Bu üretim emrinin önceliği"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Proje Kodu"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Bu üretim emri için proje kodu"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "Açık alt üretim işlemleri varken üretim emri tamamlanamaz"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "Eksik çıktılar varken üretim emri tamamlanamaz"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Üretim tahsisatını tamamlamak için boşaltma görevi başarısız oldu"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "{build} üretim emri tamamlandı"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Bir üretim emri tamamlandı"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Hiçbir üretim çıktısı belirtilmedi"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Üretim çıktısı zaten tamamlanmış"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Miktar sıfırdan büyük olmalıdır"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "Üretim çıktısı tüm gerekli testleri geçmedi"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "Tahsis edilen stok kalemleri hâlâ üretimde"
-#: build/models.py:1211
+#: build/models.py:1150
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:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Üretim Emri Satırı"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Üretim nesnesi"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Üretim nesnesi"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Miktar"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Üretim emri için gereken miktar"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "Tüketilen Stok Miktarı"
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "Seçilen stok kalemi BOM satırı ile eşleşmiyor"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Seri numaralı stok için miktar bir olmalı"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Stok kalemi fazladan tahsis edilmiş"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Stok Kalemi"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Kaynak stok kalemi"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "Üretime tahsis edilecek stok miktarı"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Kur"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Hedef stok kalemi"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Üretim Seviyesi"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Parça Adı"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Üretim Çıktısı"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Üretim çıktısı üst üretim ile eşleşmiyor"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Bu üretim çıktısı zaten tamamlandı"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Bu üretim çıktısı tam tahsis edilmedi"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Üretim çıktısının miktarını girin"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "İzlenebilir parçalar için tamsayı miktar gerekir"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Seri Numaraları"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Üretim çıktıları için seri numaraları girin"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Üretim çıktısı için stok konumu"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Seri Numaralarını Otomatik Tahsis Et"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Şu seri numaraları zaten varlar veya geçersizler"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Bir üretim çıktıları listesi sağlanmalıdır"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Hurdaya ayrılan çıktılar için stok konumu"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Ayırmaları İptal Et"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok ayırmalarını iptal et"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Tamamlanan üretim çıktıları içi konum"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Tamamlanmamış Ayırmayı Onayla"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Stok henüz tamamen tahsis edilmemşse çıktıları tamamla"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Tahsis Edilen Stoku Tüket"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Bu üretim için zaten tahsis edilmiş olan tüm stokları tüket"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Tamamlanmamış Çıktıları Kaldır"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "İzin verilmedi"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Bu üretim emri tarafından tüketildi olarak kabul et"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Aşırı Tahsis Edilmiş Stok"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Üretim emrine atanan ek stok kalemlerini nasıl işlemek istersiniz"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Tahsis Edilmeyeni Kabul Et"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul et"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "Gerekli stok tamamen tahsis edilemedi"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Tamamlanmamış Kabul et"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Gereken miktarda üretim çıktısının tamamlanmadığını kabul et"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Gereken üretim miktarı tamamlanmadı"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Üretim emrinin açık alt üretim emirleri var"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Üretim emri üretim durumunda olmalıdır"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Üretim emrinde eksik çıktılar var"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Üretim Satırı"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Üretim çıktısı"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Üretim çıktısı aynı üretimi göstermelidir"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Üretim Satırı"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Kalem stokta olmalıdır"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Mevcut miktar ({q}) aşıldı"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Ayrılma ögeleri sağlanmalıdır"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Parçaların alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Konumu Hariç Tut"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Bu seçilen konumdan stok kalemlerini hariç tut"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Birbirinin Yerine Kullanılabilir Stok"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Yedek Stok"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Yedek parçaların ayrılmasına izin ver"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "İsteğe Bağlı Ögeler"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "Tüm Ögeler"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "Takip edilmeyen kalemler"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "Takipli Kalemler"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "Kalem Türü"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "Otomatik tahsis edilecek ürün tipini seçin"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "ML Referansı"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "BOM Parça ID"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "ML Parça Adı"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "Kur"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "Yap"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Tedarikçi Parçası"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Tahsis Edilen Miktar"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Üretim Referansı"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Parça Kategorisi Adı"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Takip Edilebilir"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Devralınmış"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Varyantlara İzin Ver"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "ML Ögesi"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Üretimde"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "Üretim için Planlandı"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Harici Stok"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Mevcut Stok"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Mevcut Yedek Stok"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Mevcut Varyant Stok"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "Stok tüketimi için isteğe bağlı notlar"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "Üretim kalemi doğru üretim emrini göstermelidir"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "Üretim kalemi tahsisini yinele"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "Üretim satırı doğru üretim emrini göstermelidir"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "Üretim satırı tahsisini yinele"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "En az bir kalem veya satır sağlanmalıdır"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Bekliyor"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Üretim"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Beklemede"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "İptal edildi"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Tamamlandı"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "{build} üretim emri tamamlandı"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Bir üretim emri tamamlandı"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Üretim emri için gereken stok"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "Üretim emri {build} ek stok gerektiriyor"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Geciken Üretim Emri"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "{bo} üretim emri şimdi gecikti"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Link Olanlar"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "Dosya Olanlar"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Kullanıcının bu eki silmek için izni yok"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Güncellendi"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "Son güncellemenin zaman damgası"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "Güncelleyen"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "Bu nesneyi en son güncelleyen kullanıcı"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Eşsiz proje kodu"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Proje açıklaması"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "Ayarlar anahtarı"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Ayarlar değeri"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "Değer bir boolean değer olmalıdır"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "Değer bir integer değer olmalıdır"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "Değer geçerli bir sayı olmalıdır"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "Değer doğrulama kontrollerini geçemiyor"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Fiyat"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "Belirtilen miktardaki birim fiyat"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Bitiş Noktası"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Bu web kancası aktif mi"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Token"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Erişim için belirteç"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Gizli"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "HMAC için paylaşılan gizli bilgi"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "Mesaj ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "Bu mesaj için benzersiz tanımlayıcı"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "Sağlayıcı"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "Bu mesajın alındığı ana bilgisayar"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "Başlık"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Bu mesajın başlığı"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Gövde"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Bu mesajın gövdesi"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "Bu mesajın alındığı uç nokta"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "Üzerinde çalışıldı"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "Bu mesajdaki iş bitirildi mi?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "Kimlik"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Başlık"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: 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:1758
msgid "Published"
msgstr "Yayınlandı"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Yazar"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Özet"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Oku"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Haberi okudunuz mu?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Görsel dosyası"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "Bu görsel için hedef model türü"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "Bu görsel için hedef model ID"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "Özel Birim"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "Birim simgesi benzersiz olmalıdır"
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Birim adı"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Sembol"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "İsteğe bağlı birim simgesi"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Tanımlama"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Birim tanımlaması"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Ek"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Eksik dosya"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "Bozuk dış bağlantı"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "Model türü"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "Görsel için hedef model türü"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Eklenecek dosyayı seç"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Yorum"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "Ek yorumu"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Yükleme tarihi"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Dosyanın yüklendiği tarih"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Dosya Boyutu"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Bayt cinsinden dosya boyutu"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "Ek için belirtilen model türü geçersiz"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "Özel Durum"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "Özel Durumlar"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "Referans Durum Seti"
-#: common/models.py:2109
+#: common/models.py:2285
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:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "Mantıksal anahtar"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Değer"
-#: common/models.py:2121
+#: common/models.py:2297
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:2303
msgid "Name of the state"
msgstr "Durumun adı"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Etiket"
-#: common/models.py:2137
+#: common/models.py:2313
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:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Renk"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "Ön yüzde gösterilecek renk"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Model"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "Bu durumun ilişkilendirildiği model"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "Model seçilmelidir"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "Anahtar Seçilmelidir"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "Mantıksal anahtar seçilmelidir"
-#: common/models.py:2179
+#: common/models.py:2355
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:2362
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:2368
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:2375
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:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Seçim Listesi"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "Seçim Listeleri"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "Seçim listesinin adı"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "Seçim listesinin açıklaması"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Kilitli"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "Bu seçim listesi kilitli mi?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "Bu seçim listesi kullanılabilir mi?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "Kaynak Eklentisi"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "Seçim listesini sağlayan eklenti"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "Kaynak Dize"
-#: common/models.py:2287
+#: common/models.py:2463
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:2472
msgid "Default Entry"
msgstr "Varsayılan Girdi"
-#: common/models.py:2297
+#: common/models.py:2473
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:2478 common/models.py:3375
msgid "Created"
msgstr "Oluşturuldu"
-#: common/models.py:2303
+#: common/models.py:2479
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:2484
msgid "Last Updated"
msgstr "Son Güncelleme"
-#: common/models.py:2309
+#: common/models.py:2485
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:2547
msgid "Selection List Entry"
msgstr "Seçim Listesi Girdisi"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "Seçim Listesi Girişleri"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "Bu girdinin ait olduğu seçim listesi"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "Seçim listesi girdisinin değeri"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "Seçim listesi girdisi için etiket"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "Seçim listesi girdisinin açıklaması"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "Bu seçim listesi girdisi aktif mi?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Parametre Şablonu"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "Parametre Şablonları"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "Onay kutusu parametrelerinin birimleri olamaz"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "Onay kutusu parametrelerinin seçenekleri olamaz"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Seçenekler eşsiz olmalıdır"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "Parametre şablon adı benzersiz olmalıdır"
-#: common/models.py:2543
+#: common/models.py:2719
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:2725
msgid "Parameter Name"
msgstr "Parametre Adı"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Birim"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Bu parametre için fiziksel birimler"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Parametre açıklaması"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Onay kutusu"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "Bu parametre bir onay kutusu mu?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Seçenekler"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr "Bu parametre için seçim listesi"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Etkin"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "Bu parametre şablonu etkin mi?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "Parametre"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "Parametreler"
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "Parametre için belirtilen model türü geçersiz"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "Model ID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "Parametre şablonu"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Veri"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Not"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "İsteğe bağlı not alanı"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "Barkod Taraması"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "Barkod verisi"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "Barkodu taratan kullanıcı"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "Zaman damgası"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "Barkod taramasının tarihi ve saati"
-#: common/models.py:2870
+#: common/models.py:3046
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:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Bağlam"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "Barkod taraması için bağlam verisi"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "Yanıt"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Sonuç"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "Barkod taraması başarılı mıydı?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "Bir hata oluştu"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "E-posta İletisi"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "E-posta İletileri"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "Duyuruldu"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "Gönderildi"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "Başarısız"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "Teslim edildi"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "Onaylandı"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "Gelen"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "Giden"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "Yanıt Yok"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "Teslimat Takibi"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "Okumayı Takip Et"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "Tıklamayı Takip Et"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "Global ID"
-#: common/models.py:3096
+#: common/models.py:3272
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:3279
msgid "Thread ID"
msgstr "Konu Kimliği"
-#: common/models.py:3105
+#: common/models.py:3281
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:3290
msgid "Thread"
msgstr "Konu"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "Bu mesaja bağlı konu"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "Öncelik"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "E-Posta Konusu"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "E-posta Konuları"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
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:3363
msgid "Unique identifier for this thread"
msgstr "Bu konu için benzersiz tanımlayıcı"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "Dahili Olarak Başlatıldı"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "Bu konu dahili olarak mı başlatıldı?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "Konunun oluşturulduğu tarih ve saat"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "Konunun son güncellendiği tarih ve saat"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Teslim Alınan Kalemler"
@@ -2451,25 +2491,25 @@ msgstr "Anahtar Argümanlar"
msgid "Task keyword arguments"
msgstr "Anahtar görev argümanları"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "Model Tipi"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "Seçim listesi kilitli"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "günler"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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ı"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
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:303
msgid "Update Check Interval"
msgstr "Güncelleme Kontrol Aralığı"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
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:310
msgid "Automatic Backup"
msgstr "Otomatik Yedekleme"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Otomatik Yedekleme Aralığı"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Görev Silme Aralığı"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
msgid "Error Log Deletion Interval"
msgstr "Hata Günlüğü Silme Aralığı"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
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:339
msgid "Notification Deletion Interval"
msgstr "Bildirim Silme Aralığı"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
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:348
msgid "Email Deletion Interval"
msgstr "E-posta Silme Aralığı"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
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:357
msgid "Protect Email Log"
msgstr "E-posta Kaydını Koru"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "E-posta kayıt girdilerinin silinmesini engelle"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Barkod Desteği"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr "Barkod Sonuçlarını Depola"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
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:375
msgid "Barcode Scans Maximum Count"
msgstr "Maksimum Barkod Tarama Sayısı"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
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:381
msgid "Barcode Input Delay"
msgstr "Barkod Girdi Gecikmesi"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "Barkod girdi işleme gecikme süresi"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "Barkod Web Kamerası Desteği"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr "Barkod Verisini Göster"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
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:400
msgid "Barcode Generation Plugin"
msgstr "Barkod Üreteci Eklentisi"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
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:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Parça Revizyonları"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr "Yalnızca Montaj Revizyonu"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
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:424
msgid "Allow Deletion from Assembly"
msgstr "Montajdan Silmeye İzin Ver"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
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:430
msgid "IPN Regex"
msgstr "DPN Regex"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Yinelenen DPN'ye İzin Ver"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "DPN Düzenlemeye İzin Ver"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
msgid "Copy Part BOM Data"
msgstr "Parça ML Verisini Kopyala"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
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:452
msgid "Copy Part Parameter Data"
msgstr "Parça Parametre Verisini Kopyala"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
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:458
msgid "Copy Part Test Data"
msgstr "Parça Test Verisini Kopyala"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
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:464
msgid "Copy Category Parameter Templates"
msgstr "Kategori Paremetre Sablonu Kopyala"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
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:471
msgid "Parts are templates by default"
msgstr "Parçaları varsayılan olan şablondur"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Bileşen"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Satın Alınabilir"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Satılabilir"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "Parçalar varsayılan olarak satılabilir"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Sanal"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "Parçalar varsayılan olarak sanaldır"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "İlgili parçaları göster"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Başlangıç Stok Verisi"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "İlk Tedarikçi Bilgileri"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
msgid "Part Name Display Format"
msgstr "Parça Adı Görüntüleme Biçimi"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
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:539
msgid "Part Category Default Icon"
msgstr "Parça Kategorisi Varsayılan Simgesi"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
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:545
msgid "Minimum Pricing Decimal Places"
msgstr "Minimum Fiyatlandırma Ondalık Basamakları"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
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:558
msgid "Maximum Pricing Decimal Places"
msgstr "Maksimum Fiyatlandırma Ondalık Basamakları"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
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:571
msgid "Use Supplier Pricing"
msgstr "Tedarikçi Fiyatlandırmasını Kullan"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Satın Alma Geçmişini Geçersiz Kılma"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
msgid "Use Stock Item Pricing"
msgstr "Stok Kalemi Fiyatlandırmasını Kullan"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Stok Kalemi Fiyatlandırma Süresi"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Varyant Fiyatlandırması Kullan"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Yalnızca Aktif Varyantlar"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr "Fiyatlandırmayı Otomatik Güncelle"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
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:626
msgid "Pricing Rebuild Interval"
msgstr "Fiyatlandırmayı Yeniden Oluşturma Aralığı"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Dahili Fiyatlar"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "Parçalar için dahili fiyatları etkinleştir"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "Dahili Fiyat Geçersiz Kılma"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr "Malzeme listesinde sıfır miktara izin ver"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Etiket yazdırmayı etkinleştir"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "Etiket Görseli DPI Değeri"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Raporları Etkinleştir"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Rapor üretimini etkinleştir"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Hata Ayıklama Modu"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr "Rapor Hatalarını Günlüğe Kaydet"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Parametre Birimlerini Zorunlu Kıl"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Küresel Çapta Benzersiz Seri Numaraları"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Tükenen Stoku Sil"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
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:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Parti Kodu Şablonu"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Stok Sona Erme Tarihi"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "Stokun sona erme işlevselliğini etkinleştir"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "Süresi Dolan Stoku Sat"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "Süresi dolan stok satışına izin ver"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "Stok Eskime Süresi"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Süresi Dolmuş Stoktan Üretim"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "Süresi dolmuş stok ile üretime izin ver"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "Stok Sahipliği Kontrolü"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
msgid "Stock Location Default Icon"
msgstr "Varsayılan Stok Konumu Simgesi"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
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:769
msgid "Show Installed Stock Items"
msgstr "Takılı Stok Kalemlerini Göster"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
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:775
msgid "Check BOM when installing items"
msgstr "Kalemlerin kurulumunu yaparken BOM'u kontrol et"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
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:783
msgid "Allow Out of Stock Transfer"
msgstr "Stok Dışı Aktarıma İzin Ver"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "Üretim Emri Referans Şablonu"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
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:803
msgid "Require Active Part"
msgstr "Aktif Parça Gerektirir"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
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:809
msgid "Require Locked Part"
msgstr "Kilitli Parça Gerekli"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
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:815
msgid "Require Valid BOM"
msgstr "Geçerli BOM gereklidir."
-#: common/setting/system.py:811
+#: common/setting/system.py:816
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:821
msgid "Require Closed Child Orders"
msgstr "Kapalı Alt Siparişler Gerekli"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
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:829
msgid "External Build Orders"
msgstr "Harici Üretim Emirleri"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "Harici üretim emri işlevselliğini etkinleştir"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "Testler Geçene Kadar Engelle"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "Tüm gerekli testler geçene kadar üretim çıktılarını tamamlamayı engelle"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "İade Siparişlerini Etkinleştir"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştir"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştirin."
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "İade Sipariş referans alanı oluşturmak için gerekli desen"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Tamamlanan İade Siparişlerini Düzenle"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Tamamlandıktan sonra iade siparişlerini düzenlemeye izin ver"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Satış Siparişi Referans Şablonu"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Satış Siparişi referans alanını üretmek için gerekli şablon"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Satış Siparişi Varsayılan Gönderi"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Satış siparişleriyle varsayılan gönderi oluşturmayı etkinleştir"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Tamamlanmış Satış Siparişlerini Düzenle"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Gönderilen veya tamamlanan satış siparişlerini düzenlemeye izin ver"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "Kontrol Gerektiren Gönderi"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "Kalemler kontrol edilene dek gönderilerin tamamlanmasını engelle"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "Gönderilen Siparişleri Tamamlandı Olarak İmle"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "Gönderildi olarak işaretli satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Satın Alma Siparişi Referans Şablonu"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Tamamlanan Satın Alma Siparişlerini Düzenle"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr "Para Birimini Dönüştür"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
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:977
msgid "Auto Complete Purchase Orders"
msgstr "Satın Alma Siparişlerini Otomatik Tamamla"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
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:986
msgid "Enable password forgot"
msgstr "Şifremi unuttum seçeneğini etkinleştir"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Kayıt olmayı etkinleştir"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "SSO Etkinleştir"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "SSO ile kayıt olmayı etkinleştir"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr "SSO grup eşitlemeyi etkinleştir"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
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:1020
msgid "SSO group key"
msgstr "SSO grup anahtarı"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
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:1026
msgid "SSO group map"
msgstr "SSO grup haritası"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "SSO dışındaki grupları kaldır"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "E-posta Gerekir"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "SSO kullanıcıları otomatik doldur"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Postayı iki kez gir"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Şifreyi iki kez gir"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Alanlara izin ver"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Hesap oluştururken grup"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "ÇFKD'yi Zorunlu Kıl"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
msgid "Check plugins on startup"
msgstr "Başlangıçta eklentileri kontrol et"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
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:1102
msgid "Check for plugin updates"
msgstr "Eklenti güncellemelerini kontrol et"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
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:1109
msgid "Enable URL integration"
msgstr "URL entegrasyonunu etkinleştir"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Gezinti entegrasyonunu etkinleştir"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "Eklentilerin gezintiye entegre edilmesini etkinleştir"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "Uygulama entegrasyonunu etkinleştir"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "Uygulamalar eklemek için eklentileri etkinleştir"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "Zamanlama entegrasyonunu etkinleştir"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
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:1137
msgid "Enable event integration"
msgstr "Olay entegrasyonunu etkinleştir"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
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:1144
msgid "Enable interface integration"
msgstr "Arayüz entegrasyonunu etkinleştir"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
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:1151
msgid "Enable mail integration"
msgstr "Posta entegrasyonunu etkinleştir"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
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:1158
msgid "Enable project codes"
msgstr "Proje kodlarını etkinleştir"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
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:1164
msgid "Enable Stocktake"
msgstr "Stok Sayımını Etkinleştir"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
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:1172
msgid "Exclude External Locations"
msgstr "Harici Konumları Hariç Tut"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
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:1180
msgid "Automatic Stocktake Period"
msgstr "Otomatik Stok Sayımı Periyodu"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
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:1187
msgid "Delete Old Stocktake Entries"
msgstr "Eski Stok Geçmişi Girdilerini Sil"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
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:1195
msgid "Stocktake Deletion Interval"
msgstr "Stok Geçmişi Silme Aralığı"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
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:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "Eski Stok Geçmişi Girdilerini Sil"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
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:1212
msgid "Stock Tracking Deletion Interval"
msgstr "Stok Geçmişi Silme Aralığı"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
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:1221
msgid "Display Users full names"
msgstr "Kullancıların tam isimlerini görüntüle"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
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:1227
msgid "Display User Profiles"
msgstr "Kullanıcı Profillerini Göster"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
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:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "Test İstasyon Verisini Etkinleştir"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
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:1253
msgid "Enable Machine Ping"
msgstr "Makine Pingini Etkinleştir"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
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"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "Devre dışı: Tam kategori yolu fareyle üzerine gelindiğinde bir araç ipucu olarak görüntülenir. Etkin: Tam kategori yolu düz metin olarak görüntülenir."
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Hata raporları alın"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Sistem hataları için bildirim alın"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "Son kullanılan yazdırma makineleri"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "Son kullanılan yazdırma makinelerini bir kullanıcı için kaydet"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "Tüm modeller"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "Ekli model türü sağlanamadı"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "Geçersiz ek modeli türü"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "Minimum yer sayısı maksimum yer sayısından fazla olamaz"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "Maksimum yer sayısı minimum yer sayısından az olamaz"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Boş bir alan adına izin verilmez."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Geçersiz alan adı: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "Değer büyük harf olmalıdır"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "Değer geçerli bir değişken tanımlayıcısı olmalıdır"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Üretici"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Şirket"
@@ -4050,8 +4193,8 @@ msgstr "İletişim telefon numarası"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "İletişim"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Adres"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Temel Parça"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "ÜPN"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Üretici Parça Numarası"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Tedarikçi"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Tedarikçi stok kodu"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "temel maliyet"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Paketleme"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "çoklu"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,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:1175
msgid "Valid"
msgstr "Geçerli"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Bilinmeyen"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ 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:132
msgid "Order Reference"
msgstr "Sipariş Referansı"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "Açık"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "Proje Kodu Var"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Oluşturan"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "Öncesinde Oluşturuldu"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "Sonrasında Oluşturuldu"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "Başlangıç Tarihi Var"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "Öncesi Başlangıç Tarihi"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "Sonrası Başlangıç Tarihi"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "Hedef Tarihi Var"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "Öncesi Hedef Tarih"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "Sonrası Hedef Tarih"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "Daha önce güncellendi"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "Güncellendi (den sonra)"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "Fiyatlandırılmış"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "Öncesinde Tamamlandı"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "Sonrasında Tamamlandı"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Sipariş"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "Sipariş Tamamlandı"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Dahili Parça"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "Sipariş Bekliyor"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Tamamlandı"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "Sevkiyatı Var"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "İade Siparişi"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Toplam Fiyat"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "Bu sipariş için toplam fiyat"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Sipariş Para Birimi"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "Bu sipariş kilitli olduğundan değiştirilemez"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "İletişim bilgileri seçilen şirketle eşleşmiyor"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "Başlangıç tarihi hedef tarihinden önce olmalıdır"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "Adres bilgileri seçilen şirketle eşleşmiyor"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Açıklama (isteğe bağlı)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Harici sayfaya bağlantı"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "Başlangıç tarihi"
-#: order/models.py:471
+#: order/models.py:510
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:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Hedeflenen tarih"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Sipariş teslimatı için beklenen tarih. Bu tarihten sonra sipariş gecikmeli olacaktır."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Düzenleme Tarihi"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Siparişin düzenlendiği tarih"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "Güncellenme Tarihi"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Bu siparişten sorumlu kullanıcı veya grup"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Bu sipariş için ilgili kişi"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "Bu sipariş için şirket adresi"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Durum"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Satın alma siparişi durumu"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Ürünlerin sipariş edilmekte olduğu şirket"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Tedarikçi Referansı"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Tedarikçi siparişi referans kodu"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "teslim alan"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "Siparişin tamamlandığı tarih"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "Hedef"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "Teslim alınan kalemler için varış yeri"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Parça tedarikçisi PO tedarikçisi ile eşleşmelidir"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Satır, satın alma siparişi ile eşleşmiyor"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "Satırda bağlantılı bir parça eksik"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Miktar pozitif bir sayı olmalıdır"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
msgid "Company to which the items are being sold"
msgstr "Ürünlerin satılmakta olduğu şirket"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "Satış siparişi durumu"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Müşteri Referansı "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "Müşteri siparişi referans kodu"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Sevkiyat Tarihi"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "tarafından sevk edildi"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "Sipariş zaten tamamlandı"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "Sipariş zaten iptal edildi"
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "Tamamlanmamış sevkiyatlar olduğundan sipariş tamamlanamaz"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "Tamamlanmamış tahsisatlar olduğundan sipariş tamamlanamaz"
-#: order/models.py:1477
+#: order/models.py:1520
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:1817 order/models.py:1842
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:1850
msgid "Item quantity"
msgstr "Kalem miktarı"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Satır referansı"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Satır notları"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Satır açıklaması (isteğe bağlı)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Bu satır için ek bağlam"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Birim Fiyat"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "Satın Alma Siparişi Kalemi"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "Tedarikçi parçası tedarikçi ile eşleşmelidir"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "Üretim emri harici olarak işaretlenmelidir"
-#: order/models.py:1951
+#: order/models.py:2010
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:2016
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:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Tedarikçi parçası"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Teslim Alındı"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Alış Fiyatı"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Birim alış fiyatı"
-#: order/models.py:2025
+#: order/models.py:2095
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:2157
msgid "Purchase Order Extra Line"
msgstr "Ek Sipariş Kalemi"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "Satış Siparişi Kalemi"
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Satış Fiyatı"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Birim satış fiyatı"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Sevk edildi"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Sevk edilen miktar"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "Satış Siparişi Sevkiyatı"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "Sevk adresi müşteri ile eşleşmelidir"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "Bu sevkiyatın sevk adresi"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Sevkiyat tarihi"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Teslimat Tarihi"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "Sevkiyatın teslimat tarihi"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "Kontrol Eden"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Sevkiyat"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Sevkiyat numarası"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Takip Numarası"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Sevkiyat takip numarası"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Fatura Numarası"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "Fatura referans numarası"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "Sevkiyat zaten sevk edildi"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "Sevkiyatın tahsis edilen stok kalemleri bulunmuyor"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "Sevkiyat tamamlanmadan önce kontrol edilmelidir"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "Ek Sipariş Kalemi"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "Satış Siparişi Tahsisatı"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Stok kalemi henüz atanmadı"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "Tahsis miktarı stok miktarını aşamaz"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Satır"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "Satış siparişinin sevkiyat referansı"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Kalem"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Tahsis edilecek stok kalemini seçin"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Stok tahsis miktarını girin"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "İade Siparişi referansı"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "Ürünlerin iade edildiği şirket"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "İade siparişi durumu"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "İade Siparişi Satırı"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "Stok kalemi belirtilmelidir"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "İade miktarı stok miktarını aşıyor"
-#: order/models.py:3044
+#: order/models.py:3114
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:3119
msgid "Invalid quantity for serialized stock item"
msgstr "Seri numaralı stok kalemi için geçersiz miktar"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "Müşteriden iade edilecek ürünü seçin"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "Teslim Alma Tarihi"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "Bu iade kaleminin teslim alındığı tarih"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Sonuç"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "Bu satırın sonucu"
-#: order/models.py:3101
+#: order/models.py:3171
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:3181
msgid "Return Order Extra Line"
msgstr "Ek Sipariş Kalemi"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "Sipariş ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "Kopyası oluşturulacak siparişin ID'si"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "Satırları Kopyala"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "Satırları orijinal siparişten kopyala"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "Ek Kalemleri Kopyala"
-#: order/serializers.py:89
+#: order/serializers.py:91
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:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Parametreleri Kopyala"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr "Parametreleri orijinal siparişten kopyala"
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Satırlar"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "Tamamlanan Satırlar"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "Siparişin Kopyasını Oluştur"
-#: order/serializers.py:185
+#: order/serializers.py:187
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:266
msgid "Invalid order ID"
msgstr "Geçersiz sipariş ID"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Tedarikçi Adı"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "Sipariş iptal edilemez"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
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:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "Siparişin eksik satırları var"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "Sipariş açık değil"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "Otomatik Fiyatlandırma"
-#: order/serializers.py:678
+#: order/serializers.py:680
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:697
msgid "Purchase price currency"
msgstr "Satın alma fiyatı para birimi"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "Kalemleri Birleştir"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "SKU"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Dahili Parça Numarası"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "Dahili Parça Adı"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "Tedarikçi parçası belirtilmeli"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "Satın alma siparişi belirtilmeli"
-#: order/serializers.py:784
+#: order/serializers.py:786
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:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Satır"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
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:880
msgid "Enter serial numbers for incoming stock items"
msgstr "Gelen stok kalemlerinin seri numaralarını girin"
-#: order/serializers.py:888
+#: order/serializers.py:890
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:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "Gelen stok kalemleri için ek not"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Barkod"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Taranan barkod"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Barkod zaten kullanımda"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "Satırlar sağlanmalıdır"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "Hedef konum belirtilmelidir"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "Sağlanan barkod değerleri benzersiz olmalıdır"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "Sevkiyatlar"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Tamamlanan Sevkiyatlar"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "Tahsis Edilen Kalemler"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Satış para birimi"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "Tahsis Edilen Kalemler"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "Sevkiyat bilgileri sağlanmadı"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Miktar pozitif olmalıdır"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "Tahsis edilecek seri numaralarını girin"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "Sevkiyat zaten sevk edildi"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "Şu seri numaraları mevcut değildir"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "İade siparişi kalemi"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
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:2140
msgid "Line item has already been received"
msgstr "Ürün kalemi zaten teslim alındı"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr "İade olacak miktar"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Satır para birimi"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Kayıp"
@@ -5661,6 +5879,11 @@ msgstr "Geri öde"
msgid "Reject"
msgstr "Reddet"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Düzenlendi"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Geciken Satın Alma Siparişi"
@@ -5696,7 +5919,7 @@ msgstr "Yıldızlı"
msgid "Filter by starred categories"
msgstr "Yıldızlı kategorilere göre filtrele"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Derinlik"
@@ -5704,7 +5927,7 @@ msgstr "Derinlik"
msgid "Filter by category depth"
msgstr "Kategori derinliğine göre filtrele"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "Üst Seviye"
@@ -5712,7 +5935,7 @@ msgstr "Üst Seviye"
msgid "Filter by top-level categories"
msgstr "Üst seviye kategorilere göre filtrele"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "Kademeli"
@@ -5732,75 +5955,79 @@ msgstr "Üst kategoriye göre filtrele"
msgid "Exclude sub-categories under the specified category"
msgstr "Belirtilen kategorideki alt kategorileri hariç tut"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "Sonuçları Olanlar"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "Varyant mı"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "Revizyon mu"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "Revizyonu Olanlar"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "BOM Geçerli"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "Kategorileri Kademele"
-#: part/api.py:962
+#: part/api.py:983
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:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "Montaj parçası etkin"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "Montaj parçası takip edilebilir"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "Montaj test edilebilir"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "Bileşen etkin"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "Bileşen takip edilebilir"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "Bileşen test edilebilir"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "Bileşen bir montaj parçası"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "Bileşen sanal"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "Stok mevcut"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "Kullanımlar"
@@ -5809,11 +6036,11 @@ msgstr "Kullanımlar"
msgid "Part Category"
msgstr "Parça Kategorisi"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Varsayılan Konum"
msgid "Default location for parts in this category"
msgstr "Bu kategori içindeki parçalar için varsayılan konum"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Yapısal"
@@ -5837,12 +6064,12 @@ msgstr "Varsayılan anahtar kelimeler"
msgid "Default keywords for parts in this category"
msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Simge"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Simge (isteğe bağlı)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Birden fazla sat"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Minimum BOM Maliyeti"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Bileşenlerin minimum maliyeti"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Maksimum BOM Maliyeti"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Bileşenlerin maksimum maliyeti"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Minimum Satın Alma Maliyeti"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Minimum tarihsel satın alma maliyeti"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Maksimum Satın Alma Maliyeti"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "Maksimum tarihsel satın alma maliyeti"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Minimum Dahili Fiyat"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "Dahili fiyat kademelerine dayalı minimum maliyet"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Maksimum Dahili Fiyat"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Minimum Tedarikçi Fiyatı"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "Parça için minimum dış tedarikçi fiyatı"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Maksimum Tedarikçi Fiyatı"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "Parça için maksimum dış tedarikçi fiyatı"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Minimum Varyant Maliyeti"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "Varyant parçaların hesaplanan minimum maliyeti"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Maksimum Varyant Maliyeti"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "Varyant parçaların hesaplanan maksimum maliyeti"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Minimum Maliyet"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Minimum maliyeti geçersiz kıl"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Maksimum Maliyet"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Maksimum maliyeti geçersiz kıl"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Hesaplanan genel minimum maliyet"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Hesaplanan genel maksimum maliyet"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Minimum Satış Fiyatı"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "Fiyat kademelerine dayalı minimum satış fiyatı"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Maksimum Satış Fiyatı"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Minimum Satış Maliyeti"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Minimum tarihsel satış fiyatı"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Maksimum Satış Maliyeti"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Maksimum tarihsel satış fiyatı"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Stok sayımı için parça"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Kalem Sayısı"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "Sayım anındaki tekil stok kaydı sayısı"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "Sayım anındaki toplam mevcut stok"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Tarih"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Stok sayımının yapıldığı tarih"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Minimum Stok Maliyeti"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "Mevcut stokun tahmini minimum maliyeti"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Maksimum Stok Maliyeti"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "Mevcut stokun tahmini maksimum maliyeti"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "Parça Satış Fiyat Kademesi"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "Parça Test Şablonu"
-#: part/models.py:3646
+#: part/models.py:3710
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:3678
+#: part/models.py:3742
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:3692
+#: part/models.py:3756
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:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Test Adı"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Test için bir ad girin"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "Test Anahtarı"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "Test için basitleştirilmiş anahtar"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Test Açıklaması"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Bu test için açıklama girin"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "Bu test etkinleştirildi mi?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Gerekli"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Testi geçmesi için bu gerekli mi?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Değer Gerektirir"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Ek Gerektirir"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
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:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+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:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "BOM kalemi değiştirilemez - montaj kilitlidir"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Üst parçayı seçin"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Alt parça"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "BOM'da kullanılacak parçayı seçin"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Bu BOM kalemi için BOM miktarı"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Bu BOM kalemi isteğe bağlıdır"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "Hazırlık Payı"
-#: part/models.py:4009
+#: part/models.py:4141
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:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "Fire"
-#: part/models.py:4019
+#: part/models.py:4151
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:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "Kat Yuvarlama"
-#: part/models.py:4032
+#: part/models.py:4164
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:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "BOM kalemi referansı"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "BOM kalemi notları"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Sağlama Toplamı"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "BOM satırı sağlama toplamı"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Doğrulandı"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Bu BOM kalemi doğrulandı"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Devralınır"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Alt parça belirtilmelidir"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "BOM Kalemi Muadili"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Üst BOM kalemi"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Muadil parça"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Parça 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Parça 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "İlgili Parçayı Seçin"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "Bu ilişki için not"
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "Kopyalanan ilişki zaten mevcut"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "Üst Kategori"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "Üst parça kategorisi"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Alt kategoriler"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Sonuçlar"
-#: part/serializers.py:210
+#: part/serializers.py:229
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:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "Bu stok kaleminin alış para birimi"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "Dosya bir görsel değil"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Orijinal Parça"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "Kopyalanacak orijinal parçayı seçin"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "Görseli Kopyala"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "Orijinal parçadan görseli kopyala"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "BOM'u Kopyala"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
msgid "Copy parameter data from original part"
msgstr "Orijinal parçadan parametreleri kopyala"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "Notları Kopyala"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "Orijinal parçadan notları kopyala"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "Testleri Kopyala"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "Orijinal parçadan test şablonlarını kopyala"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Başlangıç Stok Miktarı"
-#: part/serializers.py:451
+#: part/serializers.py:470
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:477
msgid "Initial Stock Location"
msgstr "Başlangıç Stok Konumu"
-#: part/serializers.py:459
+#: part/serializers.py:478
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:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Üretici parça numarası"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
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:555
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:840
msgid "Category Name"
msgstr "Kategori Adı"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Üretiliyor"
-#: part/serializers.py:846
+#: part/serializers.py:870
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:877
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
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Stok Kalemleri"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "Revizyonlar"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "Tahsis Edilmemiş Stok"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "Varyant Stoku"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Parçanın Kopyasını Oluştur"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "Başlangıç verisini diğer parçadan kopyala"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Başlangıç Stoku"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "Başlangıç stok miktarı ile parça oluştur"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "Tedarikçi Bilgileri"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Kategori Parametrelerini Kopyala"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Mevcut Görsel"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "Mevcut parça görselinin dosya adı"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "Görsel dosyası mevcut değil"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
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:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Üretebilir Miktar"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "Üretim Emirleri için Gerekli"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "Üretim Emirlerine Tahsis Edildi"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "Satış Siparişleri için Gerekli"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "Satış Siparişlerine Tahsis Edildi"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "Parça DPN"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "Parça Açıklaması"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
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:1364
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:1374
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:1381
msgid "Generate Stocktake Entries"
msgstr "Stok Sayımı Kayıtları Oluşturun"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
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:1389
msgid "Generate Report"
msgstr "Rapor Oluştur"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
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:1493
msgid "Minimum Price"
msgstr "Minimum Fiyat"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
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:1501
msgid "Minimum price currency"
msgstr "Minimum fiyat para birimi"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Maksimum Fiyat"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
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:1516
msgid "Maximum price currency"
msgstr "Maksimum fiyat para birimi"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Güncelle"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "Bu parçanın fiyatlandırmasını güncelle"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
+msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "Üst montajı seçin"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "Bileşeni seçin"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "BOM'u kopyalanacak parçayı seçin"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "Mevcut Verileri Temizle"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "Devralınanı Dahil Et"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Geçersiz Satırları Atla"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Muadil Parçaları Kopyala"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala"
@@ -7091,15 +7362,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"
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr "Paket Eklenti"
msgid "Plugin"
msgstr "Eklenti"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Yazar bulunamadı"
@@ -8021,7 +8292,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ı"
@@ -8065,112 +8336,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ı"
@@ -8225,13 +8496,10 @@ msgstr "Gerekli Malzemeler"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Parça görseli"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Düzenlendi"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "İçin Gerekli Olan"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Seri Numara"
@@ -8292,7 +8560,7 @@ msgstr "Stok Kalemi Test Raporu"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Takılı Kalemler"
@@ -8325,6 +8593,10 @@ msgstr "Sonuç yok (gerekli)"
msgid "No result"
msgstr "Sonuç yok"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "part_image etiketi bir parça örneği gerektirir"
msgid "company_image tag requires a Company instance"
msgstr "company_image etiketi bir şirket örneği gerektirir"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "Konum derinliğine göre filtrele"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "Üst seviye konumlara göre filtrele"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "Filtrelenmiş sonuçlara alt konumları dahil et"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "Üst Konum"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "Üst konuma göre filtrele"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "Parça adı (büyük/küçük harf duyarlı değildir)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "Parça adı şunu içerir (büyük/küçük harf duyarlı değildir)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "Parça adı (regex)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "Parça IPN (büyük/küçük harf duyarlı değildir)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "Parça IPN şunu içerir (büyük/küçük harf duyarlı değildir)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "Parça IPN (regex)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "Minimum stok"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "Maksimum stok"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Durum Kodu"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Harici Konum"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "Üretim Emrine göre Tüketilenler"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "Başka bir stok kalemine bağlı"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Parça Ağacı"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "Daha önce güncellendi"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "Güncellendi (den sonra)"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "Stok Sayımı (-dan önce)"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "Stok Sayımı (-dan sonra)"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Son kullanma tarihi öncesi"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Son kullanma tarihi sonrası"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Bozuk"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "Bu stok kalemini ve bağlı tüm alt kalemleri hariç tutmak için bir PK girin"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "Konumları alt konumlara uygula"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "Açıksa belirtilen konumun alt konumlarındaki öğeleri de dahil eder"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "Sayısal konum ID'si veya \"null\" değeriyle filtreleyin"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Miktar gereklidir"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Geçerli bir parça girilmelidir"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Belirtilen tedarikçi parçası bulunamadı"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Tedarikçi parçası için paket boyutu tanımlanmış, ancak ‘use_pack_size’ seçeneği etkin değil"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Takibi olmayan bir parça için seri numarası verilemez"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "Takılıyı Dahil Et"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "Aktifse verilen stok kaleminin altına takılı öğelerin test sonuçları da dahil edilir"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "Sayısal Stok Kalemi ID’sine göre Filtrele"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "Belirtilen ID {id} ile bir stok kalemi bulunamadı"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "Varyantları Dahil Et"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "(-den sonra) sil"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "Önce"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Stok Konumu Türü"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Stok Konum Türleri"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Stok Konumu"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Stok Konumları"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Sahip"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Sahibi Seçin"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Harici"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Bu, harici bir stok konumudur"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Konum türü"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Bu konumun stok konumu türü"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} mevcut değil"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "Parça belirtilmelidir"
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
msgid "Item cannot belong to itself"
msgstr "Öge kendisine ait olamaz"
-#: stock/models.py:995
+#: stock/models.py:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Üst Stok Kalemi"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Temel parça"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
msgid "Where is this stock item located?"
msgstr "Bu stok kalemi nerede bulunur?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "Şuna Takıldı"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
msgid "Serial number for this item"
msgstr "Bu öge için seri numarası"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Bu stok kalemine ait parti kodu"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Stok Miktarı"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Kaynak Üretim"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "Bu stok kalemi için üretim kaydı"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "Tüketen"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "Bu stok kaleminin kullanıldığı üretim emri"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "Kaynak Satın Alma Emri"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "Bu stok kalemi için satın alma emri"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "Hedef satış siparişi"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Tükendiğinde sil"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Parçaya dönüştürüldü"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "Miktar, mevcut stoğu aşıyor"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "Parça için izlenebilirlik etkin değil"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "Miktar tam sayı olmalıdır"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr "Seri numaraları liste halinde girilmelidir"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "Miktar seri numaları ile eşleşmiyor"
-#: stock/models.py:1936
+#: stock/models.py:1997
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:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "Test şablonu mevcut değil"
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
msgid "Stock item contains other items"
msgstr "Bu öge, başka ögeler de içeriyor"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "Tedarikçi Parça Numarası"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Bu parçaya seri numarası atanamaz"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Seri numaraları zaten mevcut"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Takılacak stok kalemini seçin"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Miktar"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Takılacak kalemlerin miktarını girin"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "İşlem notu ekle (isteğe bağlı)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Miktar en az \"1\" olmalıdır"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Stok kalemi mevcut değil"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Seçilen parça malzeme listesinde bulunamadı"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Takılacak miktar, mevcudu geçmemeli"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Sökülen ürün için hedef konum"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Stok kaleminin dönüştürüleceği parçayı seçin"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Seçilen parça dönüştürülmeye uygun değil"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Tedarikçi parçası atanmış stok kalemi dönüştürülemez"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Stok kalemi durum kodu"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Durumu değiştirilecek stok kalemlerini seçin"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Hiçbir stok kalemi seçilmedi"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Alt konumlar"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "Üst stok konumu"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Parça satılabilir olmalıdır"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Ürün bir satış siparişine tahsis edilmiştir"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Ürün bir üretim emrine tahsis edilmiştir"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Stok kalemlerini atamak için müşteri"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Seçilen şirket bir müşteri değil"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Stok tahsis notları"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Bir stok kalemleri listesi girilmelidir"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Stok birleştirme notları"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Farklı tedarikçilere izin ver"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Farklı tedarikçi parçalarına sahip stokları birleştirmeye izin ver"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Farklı durumlara sahip kalemlere izin ver"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Farklı durum kodlarına sahip stokları birleştirmeye izin ver"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "En az iki stok kalemi girilmelidir"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "Değişiklik Yok"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Stok Kalemi birincil anahtar (PK) değeri"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "Stok kalemi mevcut stokta yok"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "Stok kalemi zaten stokta"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "Miktar negatif olamaz"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Stok aktarım notları"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "Mevcut stokla birleştir"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "Mümkünse iade edilen ürünleri mevcut stoklarla birleştir"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "Sıradaki Seri Numarası"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "Önceki Seri Numarası"
@@ -9458,150 +9758,158 @@ 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"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Yönetici"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Satın Alma Siparişleri"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Satış Siparişleri"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "İade Emirleri"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Kullanıcı Adı"
diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po
index 7ad5da86d5..f9b606d3d4 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Не вдалося перетворити {original} на {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Невірна кількість"
@@ -104,13 +105,13 @@ msgstr "Введіть дату"
msgid "Invalid decimal value"
msgstr "Неправильне десяткове значення"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Нотатки"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Опис"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "Опис (опціонально)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr ""
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr ""
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr ""
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr ""
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Деталь"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr ""
@@ -605,7 +593,7 @@ msgstr ""
msgid "Ancestor Build"
msgstr ""
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr ""
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr ""
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Розхідний матеріал"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr ""
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Збірка"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr ""
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Тестуємо"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr ""
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr ""
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr ""
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr ""
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Місце"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr ""
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr ""
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr ""
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr ""
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr ""
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr ""
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr ""
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr ""
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Обрати деталь для створення"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr ""
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr ""
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr ""
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr ""
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr ""
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr ""
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr ""
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr ""
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr ""
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr ""
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr ""
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr ""
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr ""
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr ""
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr ""
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr ""
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr ""
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr ""
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr ""
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr ""
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr ""
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr ""
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr ""
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr ""
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr ""
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr ""
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr ""
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr ""
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr ""
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr ""
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Кількість"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr ""
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr ""
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr ""
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr ""
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr ""
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr ""
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr ""
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr ""
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr ""
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr ""
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr ""
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr ""
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr ""
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr ""
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr ""
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr ""
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr ""
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr ""
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr ""
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr ""
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr ""
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr ""
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr ""
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr ""
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr ""
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr ""
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr ""
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr ""
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr ""
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr ""
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr ""
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr ""
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr ""
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr ""
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr ""
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr ""
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr ""
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr ""
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr ""
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr ""
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr ""
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr ""
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr ""
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr ""
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr ""
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr ""
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr ""
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr ""
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr ""
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr ""
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Дозволити варіанти"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "У виробництві"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr ""
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr ""
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr ""
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr ""
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr ""
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr ""
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr ""
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr ""
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr ""
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr ""
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr ""
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr ""
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr ""
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr ""
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr ""
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr ""
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr ""
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr ""
@@ -1554,794 +1553,835 @@ msgstr ""
msgid "Project Code Label"
msgstr ""
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr ""
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr ""
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr ""
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr ""
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr ""
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr ""
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr ""
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr ""
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr ""
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Ціна"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr ""
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr ""
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr ""
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr ""
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr ""
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr ""
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr ""
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr ""
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr ""
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr ""
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr ""
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr ""
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr ""
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Назва"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "Посилання"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr ""
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr ""
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr ""
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr ""
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr ""
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr ""
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr ""
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr ""
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr ""
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr ""
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr ""
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr ""
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr ""
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr ""
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr ""
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Коментар"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "Дата завантаження"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "Дата завантаження файлу"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "Розмір файлу"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "Розмір файлу в байтах"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr ""
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "Етикетка"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "Колір"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "Модель"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "Список вибору"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "Заблоковано"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr ""
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr ""
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr ""
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr ""
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr ""
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr ""
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr ""
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr ""
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr ""
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr ""
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr ""
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Прапорець"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr ""
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr ""
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr ""
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr ""
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr ""
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Дані"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr ""
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Примітка"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr ""
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr ""
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr ""
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr ""
@@ -2451,25 +2491,25 @@ msgstr ""
msgid "Task keyword arguments"
msgstr ""
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr ""
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr ""
#: common/setting/system.py:290
-msgid "Download from URL"
+msgid "Upload Size Limit"
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"
+msgid "Maximum allowable upload size for images and files"
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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr ""
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr ""
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr ""
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr ""
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr ""
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr ""
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr ""
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr ""
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr ""
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr ""
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr ""
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr ""
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr ""
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr ""
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr ""
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr ""
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr ""
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr ""
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr ""
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr ""
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr ""
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr ""
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr ""
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr ""
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr ""
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr ""
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr ""
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr ""
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr ""
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Компонент"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr ""
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr ""
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr ""
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Доступний для продажу"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr ""
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr ""
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "Віртуальний"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr ""
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "Показати пов'язані деталі"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr ""
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr ""
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr ""
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr ""
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr ""
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr ""
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr ""
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr ""
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr ""
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr ""
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr ""
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr ""
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr ""
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr ""
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr ""
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr ""
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr ""
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr ""
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr ""
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr ""
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr ""
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr ""
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr ""
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr ""
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr ""
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr ""
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr ""
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr ""
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr ""
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr ""
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr ""
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr ""
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr ""
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr ""
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr ""
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr ""
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr ""
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr ""
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr ""
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr ""
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr ""
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr ""
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
-#: common/setting/system.py:720
-msgid "Batch Code Template"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
msgstr ""
-#: common/setting/system.py:721
-msgid "Template for generating default batch codes for stock items"
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
+#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
msgstr ""
#: common/setting/system.py:725
-msgid "Stock Expiry"
+msgid "Batch Code Template"
msgstr ""
#: common/setting/system.py:726
-msgid "Enable stock expiry functionality"
+msgid "Template for generating default batch codes for stock items"
+msgstr ""
+
+#: common/setting/system.py:730
+msgid "Stock Expiry"
msgstr ""
#: common/setting/system.py:731
+msgid "Enable stock expiry functionality"
+msgstr ""
+
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr ""
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr ""
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr ""
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr ""
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr ""
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr ""
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr ""
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr ""
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr ""
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr ""
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr ""
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr ""
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr ""
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr ""
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr ""
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr ""
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr ""
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr ""
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr ""
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr ""
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
-msgid "Purchase Order Reference Pattern"
-msgstr ""
-
-#: common/setting/system.py:910
-msgid "Required pattern for generating Purchase Order reference field"
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
msgstr ""
#: common/setting/system.py:922
-msgid "Edit Completed Purchase Orders"
+msgid "Enable transfer order functionality in the user interface"
msgstr ""
-#: common/setting/system.py:924
-msgid "Allow editing of purchase orders after they have been shipped or completed"
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
msgstr ""
-#: common/setting/system.py:930
-msgid "Convert Currency"
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
msgstr ""
-#: common/setting/system.py:931
-msgid "Convert item value to base currency when receiving stock"
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
msgstr ""
-#: common/setting/system.py:936
-msgid "Auto Complete Purchase Orders"
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
msgstr ""
-#: common/setting/system.py:938
-msgid "Automatically mark purchase orders as complete when all line items are received"
-msgstr ""
-
-#: common/setting/system.py:945
-msgid "Enable password forgot"
-msgstr ""
-
-#: common/setting/system.py:946
-msgid "Enable password forgot function on the login pages"
+#: common/setting/system.py:949
+msgid "Purchase Order Reference Pattern"
msgstr ""
#: common/setting/system.py:951
-msgid "Enable registration"
-msgstr ""
-
-#: common/setting/system.py:952
-msgid "Enable self-registration for users on the login pages"
-msgstr ""
-
-#: common/setting/system.py:957
-msgid "Enable SSO"
-msgstr ""
-
-#: common/setting/system.py:958
-msgid "Enable SSO on the login pages"
+msgid "Required pattern for generating Purchase Order reference field"
msgstr ""
#: common/setting/system.py:963
-msgid "Enable SSO registration"
+msgid "Edit Completed Purchase Orders"
msgstr ""
#: common/setting/system.py:965
-msgid "Enable self-registration via SSO for users on the login pages"
+msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr ""
#: common/setting/system.py:971
-msgid "Enable SSO group sync"
+msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:973
-msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
+#: common/setting/system.py:972
+msgid "Convert item value to base currency when receiving stock"
+msgstr ""
+
+#: common/setting/system.py:977
+msgid "Auto Complete Purchase Orders"
msgstr ""
#: common/setting/system.py:979
-msgid "SSO group key"
+msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:980
-msgid "The name of the groups claim attribute provided by the IdP"
-msgstr ""
-
-#: common/setting/system.py:985
-msgid "SSO group map"
+#: common/setting/system.py:986
+msgid "Enable password forgot"
msgstr ""
#: common/setting/system.py:987
-msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created."
+msgid "Enable password forgot function on the login pages"
+msgstr ""
+
+#: common/setting/system.py:992
+msgid "Enable registration"
msgstr ""
#: common/setting/system.py:993
-msgid "Remove groups outside of SSO"
+msgid "Enable self-registration for users on the login pages"
msgstr ""
-#: common/setting/system.py:995
-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
-msgid "Email required"
+#: common/setting/system.py:998
+msgid "Enable SSO"
msgstr ""
-#: common/setting/system.py:1002
-msgid "Require user to supply mail on signup"
+#: common/setting/system.py:999
+msgid "Enable SSO on the login pages"
msgstr ""
-#: common/setting/system.py:1007
-msgid "Auto-fill SSO users"
+#: common/setting/system.py:1004
+msgid "Enable SSO registration"
msgstr ""
-#: common/setting/system.py:1008
-msgid "Automatically fill out user-details from SSO account-data"
+#: common/setting/system.py:1006
+msgid "Enable self-registration via SSO for users on the login pages"
msgstr ""
-#: common/setting/system.py:1013
-msgid "Mail twice"
+#: common/setting/system.py:1012
+msgid "Enable SSO group sync"
msgstr ""
#: common/setting/system.py:1014
-msgid "On signup ask users twice for their mail"
-msgstr ""
-
-#: common/setting/system.py:1019
-msgid "Password twice"
+msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
#: common/setting/system.py:1020
-msgid "On signup ask users twice for their password"
+msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:1025
-msgid "Allowed domains"
+#: common/setting/system.py:1021
+msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:1027
-msgid "Restrict signup to certain domains (comma-separated, starting with @)"
+#: common/setting/system.py:1026
+msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:1033
-msgid "Group on signup"
+#: common/setting/system.py:1028
+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:1035
-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."
+#: common/setting/system.py:1034
+msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:1041
-msgid "Enforce MFA"
-msgstr ""
+#: common/setting/system.py:1036
+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:1042
-msgid "Users must use multifactor security."
+msgid "Email required"
msgstr ""
-#: common/setting/system.py:1047
-msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
+#: common/setting/system.py:1043
+msgid "Require user to supply mail on signup"
msgstr ""
-#: common/setting/system.py:1052
-msgid "Check plugins on startup"
+#: common/setting/system.py:1048
+msgid "Auto-fill SSO users"
+msgstr ""
+
+#: common/setting/system.py:1049
+msgid "Automatically fill out user-details from SSO account-data"
msgstr ""
#: common/setting/system.py:1054
-msgid "Check that all plugins are installed on startup - enable in container environments"
+msgid "Mail twice"
+msgstr ""
+
+#: common/setting/system.py:1055
+msgid "On signup ask users twice for their mail"
+msgstr ""
+
+#: common/setting/system.py:1060
+msgid "Password twice"
msgstr ""
#: common/setting/system.py:1061
-msgid "Check for plugin updates"
+msgid "On signup ask users twice for their password"
msgstr ""
-#: common/setting/system.py:1062
-msgid "Enable periodic checks for updates to installed plugins"
+#: common/setting/system.py:1066
+msgid "Allowed domains"
msgstr ""
#: common/setting/system.py:1068
-msgid "Enable URL integration"
+msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr ""
-#: common/setting/system.py:1069
-msgid "Enable plugins to add URL routes"
-msgstr ""
-
-#: common/setting/system.py:1075
-msgid "Enable navigation integration"
+#: common/setting/system.py:1074
+msgid "Group on signup"
msgstr ""
#: common/setting/system.py:1076
-msgid "Enable plugins to integrate into navigation"
+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:1082
-msgid "Enable app integration"
+msgid "Enforce MFA"
msgstr ""
#: common/setting/system.py:1083
-msgid "Enable plugins to add apps"
+msgid "Users must use multifactor security."
msgstr ""
-#: common/setting/system.py:1089
-msgid "Enable schedule integration"
+#: common/setting/system.py:1088
+msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
msgstr ""
-#: common/setting/system.py:1090
-msgid "Enable plugins to run scheduled tasks"
+#: common/setting/system.py:1093
+msgid "Check plugins on startup"
msgstr ""
-#: common/setting/system.py:1096
-msgid "Enable event integration"
+#: common/setting/system.py:1095
+msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr ""
-#: common/setting/system.py:1097
-msgid "Enable plugins to respond to internal events"
+#: common/setting/system.py:1102
+msgid "Check for plugin updates"
msgstr ""
#: common/setting/system.py:1103
-msgid "Enable interface integration"
+msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1104
-msgid "Enable plugins to integrate into the user interface"
+#: common/setting/system.py:1109
+msgid "Enable URL integration"
msgstr ""
#: common/setting/system.py:1110
-msgid "Enable mail integration"
+msgid "Enable plugins to add URL routes"
msgstr ""
-#: common/setting/system.py:1111
-msgid "Enable plugins to process outgoing/incoming mails"
+#: common/setting/system.py:1116
+msgid "Enable navigation integration"
msgstr ""
#: common/setting/system.py:1117
-msgid "Enable project codes"
-msgstr ""
-
-#: common/setting/system.py:1118
-msgid "Enable project codes for tracking projects"
+msgid "Enable plugins to integrate into navigation"
msgstr ""
#: common/setting/system.py:1123
-msgid "Enable Stocktake"
+msgid "Enable app integration"
msgstr ""
-#: common/setting/system.py:1125
-msgid "Enable functionality for recording historical stock levels and value"
+#: common/setting/system.py:1124
+msgid "Enable plugins to add apps"
+msgstr ""
+
+#: common/setting/system.py:1130
+msgid "Enable schedule integration"
msgstr ""
#: common/setting/system.py:1131
+msgid "Enable plugins to run scheduled tasks"
+msgstr ""
+
+#: common/setting/system.py:1137
+msgid "Enable event integration"
+msgstr ""
+
+#: common/setting/system.py:1138
+msgid "Enable plugins to respond to internal events"
+msgstr ""
+
+#: common/setting/system.py:1144
+msgid "Enable interface integration"
+msgstr ""
+
+#: common/setting/system.py:1145
+msgid "Enable plugins to integrate into the user interface"
+msgstr ""
+
+#: common/setting/system.py:1151
+msgid "Enable mail integration"
+msgstr ""
+
+#: common/setting/system.py:1152
+msgid "Enable plugins to process outgoing/incoming mails"
+msgstr ""
+
+#: common/setting/system.py:1158
+msgid "Enable project codes"
+msgstr ""
+
+#: common/setting/system.py:1159
+msgid "Enable project codes for tracking projects"
+msgstr ""
+
+#: common/setting/system.py:1164
+msgid "Enable Stocktake"
+msgstr ""
+
+#: common/setting/system.py:1166
+msgid "Enable functionality for recording historical stock levels and value"
+msgstr ""
+
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr ""
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr ""
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr ""
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr ""
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
-msgid "Receive error reports"
+msgid "Show Subassemblies in BOM table"
msgstr ""
#: common/setting/user.py:256
-msgid "Receive notifications for system errors"
+msgid "Enable display of subassemblies in the BOM table"
msgstr ""
#: common/setting/user.py:261
-msgid "Last used printing machines"
+msgid "Receive error reports"
msgstr ""
#: common/setting/user.py:262
+msgid "Receive notifications for system errors"
+msgstr ""
+
+#: common/setting/user.py:267
+msgid "Last used printing machines"
+msgstr ""
+
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr ""
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr ""
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Виробник"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr ""
@@ -4050,8 +4193,8 @@ msgstr ""
msgid "Contact email address"
msgstr ""
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr ""
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr ""
@@ -4195,12 +4338,12 @@ msgstr ""
msgid "Link to address information (external)"
msgstr ""
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Базова позиція"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr ""
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr ""
@@ -4254,7 +4397,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr ""
@@ -4282,16 +4425,16 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "Базова вартість"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Мінімальний платіж (напр. комісія за збереження)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr ""
@@ -4307,7 +4450,7 @@ msgstr ""
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr ""
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr ""
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Дійсно"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr ""
@@ -4719,7 +4862,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 ""
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr ""
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr ""
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr ""
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Внутрішній компонент"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr ""
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr ""
msgid "Sales Order"
msgstr ""
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr ""
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr ""
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr ""
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr ""
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr ""
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr ""
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr ""
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr ""
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr ""
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr ""
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr ""
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr ""
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr ""
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr ""
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr ""
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr ""
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr ""
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr ""
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr ""
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr ""
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr ""
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr ""
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr ""
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr ""
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr ""
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr ""
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr ""
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr ""
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr ""
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr ""
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr ""
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr ""
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr ""
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr ""
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr ""
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr ""
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr ""
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr ""
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr ""
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr ""
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr ""
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr ""
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr ""
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr ""
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr ""
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr ""
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr ""
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr ""
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr ""
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr ""
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr ""
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr ""
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr ""
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr ""
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr ""
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr ""
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr ""
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr ""
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr ""
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr ""
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr ""
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr ""
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr ""
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr ""
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr ""
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr ""
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr ""
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr ""
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr ""
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr ""
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr ""
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr ""
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr ""
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr ""
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr ""
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr ""
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr ""
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr ""
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr ""
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr ""
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr ""
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr ""
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr ""
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr ""
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr ""
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr ""
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr ""
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr ""
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr ""
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr ""
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr ""
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr ""
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr ""
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr ""
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr ""
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr ""
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr ""
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr ""
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr ""
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr ""
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr ""
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr ""
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr ""
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr ""
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr ""
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr ""
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr ""
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr ""
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr ""
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr ""
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr ""
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr ""
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr ""
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr ""
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr ""
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr ""
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr ""
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr ""
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr ""
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr ""
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr ""
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr ""
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr ""
@@ -5661,6 +5879,11 @@ msgstr ""
msgid "Reject"
msgstr ""
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr ""
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr ""
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "Глибина"
@@ -5704,7 +5927,7 @@ msgstr "Глибина"
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr "Фільтр за батьківською категорією"
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr ""
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr ""
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr ""
@@ -5821,7 +6048,7 @@ msgstr ""
msgid "Default location for parts in this category"
msgstr ""
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr ""
@@ -5837,12 +6064,12 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr ""
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr ""
@@ -5862,984 +6089,1028 @@ msgstr ""
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr ""
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr ""
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr ""
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr ""
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr ""
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr ""
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr ""
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr ""
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr ""
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr ""
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr ""
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr ""
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr ""
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr ""
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr ""
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr ""
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr ""
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr ""
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr ""
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr ""
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr ""
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr ""
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr ""
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr ""
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr ""
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr ""
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr ""
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr ""
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr ""
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr ""
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr ""
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr ""
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr ""
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr ""
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr ""
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr ""
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr ""
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr ""
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr ""
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Дата"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr ""
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr ""
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr ""
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr ""
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr ""
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Тестова назва"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr ""
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr ""
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr ""
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
-msgid "BOM item cannot be modified - assembly is locked"
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
msgstr ""
-#: part/models.py:3956
-msgid "BOM item cannot be modified - variant assembly is locked"
-msgstr ""
-
-#: part/models.py:3966
-msgid "Select parent part"
-msgstr ""
-
-#: part/models.py:3976
-msgid "Sub part"
-msgstr ""
-
-#: part/models.py:3977
-msgid "Select part to be used in BOM"
-msgstr ""
-
-#: part/models.py:3988
-msgid "BOM quantity for this BOM item"
-msgstr ""
-
-#: part/models.py:3994
-msgid "This BOM item is optional"
-msgstr ""
-
-#: part/models.py:4000
-msgid "This BOM item is consumable (it is not tracked in build orders)"
-msgstr ""
-
-#: part/models.py:4008
-msgid "Setup Quantity"
-msgstr ""
-
-#: part/models.py:4009
-msgid "Extra required quantity for a build, to account for setup losses"
-msgstr ""
-
-#: part/models.py:4017
-msgid "Attrition"
-msgstr ""
-
-#: part/models.py:4019
-msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
-msgstr ""
-
-#: part/models.py:4030
-msgid "Rounding Multiple"
-msgstr ""
-
-#: part/models.py:4032
-msgid "Round up required production quantity to nearest multiple of this value"
-msgstr ""
-
-#: part/models.py:4040
-msgid "BOM item reference"
-msgstr ""
-
-#: part/models.py:4048
-msgid "BOM item notes"
-msgstr ""
-
-#: part/models.py:4054
-msgid "Checksum"
-msgstr ""
-
-#: part/models.py:4055
-msgid "BOM line checksum"
-msgstr ""
-
-#: part/models.py:4060
-msgid "Validated"
-msgstr ""
-
-#: part/models.py:4061
-msgid "This BOM item has been validated"
-msgstr ""
-
-#: part/models.py:4066
-msgid "Gets inherited"
-msgstr ""
-
-#: part/models.py:4067
-msgid "This BOM item is inherited by BOMs for variant parts"
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
msgstr ""
#: part/models.py:4073
+msgid "BOM item cannot be modified - assembly is locked"
+msgstr ""
+
+#: part/models.py:4080
+msgid "BOM item cannot be modified - variant assembly is locked"
+msgstr ""
+
+#: part/models.py:4090
+msgid "Select parent part"
+msgstr ""
+
+#: part/models.py:4100
+msgid "Sub part"
+msgstr ""
+
+#: part/models.py:4101
+msgid "Select part to be used in BOM"
+msgstr ""
+
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
+msgid "BOM quantity for this BOM item"
+msgstr ""
+
+#: part/models.py:4126
+msgid "This BOM item is optional"
+msgstr ""
+
+#: part/models.py:4132
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:4140
+msgid "Setup Quantity"
+msgstr ""
+
+#: part/models.py:4141
+msgid "Extra required quantity for a build, to account for setup losses"
+msgstr ""
+
+#: part/models.py:4149
+msgid "Attrition"
+msgstr ""
+
+#: part/models.py:4151
+msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
+msgstr ""
+
+#: part/models.py:4162
+msgid "Rounding Multiple"
+msgstr ""
+
+#: part/models.py:4164
+msgid "Round up required production quantity to nearest multiple of this value"
+msgstr ""
+
+#: part/models.py:4172
+msgid "BOM item reference"
+msgstr ""
+
+#: part/models.py:4180
+msgid "BOM item notes"
+msgstr ""
+
+#: part/models.py:4186
+msgid "Checksum"
+msgstr ""
+
+#: part/models.py:4187
+msgid "BOM line checksum"
+msgstr ""
+
+#: part/models.py:4192
+msgid "Validated"
+msgstr ""
+
+#: part/models.py:4193
+msgid "This BOM item has been validated"
+msgstr ""
+
+#: part/models.py:4198
+msgid "Gets inherited"
+msgstr ""
+
+#: part/models.py:4199
+msgid "This BOM item is inherited by BOMs for variant parts"
+msgstr ""
+
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr ""
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Позиція 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Позиція 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr ""
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr ""
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr ""
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "Результати"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr ""
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr ""
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr ""
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr ""
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr ""
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr ""
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr ""
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr ""
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr ""
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr ""
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr ""
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr ""
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr ""
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr ""
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "Виробничий номер позиції"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr ""
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr ""
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr ""
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr ""
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr ""
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr ""
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr ""
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr ""
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr ""
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "Початковий запас"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr ""
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr ""
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr ""
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr ""
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr ""
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "Наявне зображення"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr ""
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr ""
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr ""
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr ""
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Мінімальна ціна"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr ""
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr ""
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Максимальна ціна"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr ""
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr ""
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr ""
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr ""
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr ""
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr ""
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
-msgid "Select part to copy BOM from"
-msgstr ""
-
-#: part/serializers.py:1999
-msgid "Remove Existing Data"
-msgstr ""
-
-#: part/serializers.py:2000
-msgid "Remove existing BOM items before copying"
-msgstr ""
-
-#: part/serializers.py:2005
-msgid "Include Inherited"
-msgstr ""
-
-#: part/serializers.py:2006
-msgid "Include BOM items which are inherited from templated parts"
-msgstr ""
-
-#: part/serializers.py:2011
-msgid "Skip Invalid Rows"
-msgstr ""
-
-#: part/serializers.py:2012
-msgid "Enable this option to skip invalid rows"
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
msgstr ""
#: part/serializers.py:2017
+msgid "Select part to copy BOM from"
+msgstr ""
+
+#: part/serializers.py:2025
+msgid "Remove Existing Data"
+msgstr ""
+
+#: part/serializers.py:2026
+msgid "Remove existing BOM items before copying"
+msgstr ""
+
+#: part/serializers.py:2031
+msgid "Include Inherited"
+msgstr ""
+
+#: part/serializers.py:2032
+msgid "Include BOM items which are inherited from templated parts"
+msgstr ""
+
+#: part/serializers.py:2037
+msgid "Skip Invalid Rows"
+msgstr ""
+
+#: part/serializers.py:2038
+msgid "Enable this option to skip invalid rows"
+msgstr ""
+
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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 ""
@@ -7560,7 +7831,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 ""
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr ""
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr ""
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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 ""
@@ -8225,13 +8496,10 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Зображення позиції"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr ""
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr ""
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr ""
@@ -8292,7 +8560,7 @@ msgstr ""
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr ""
@@ -8325,6 +8593,10 @@ msgstr ""
msgid "No result"
msgstr ""
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr ""
msgid "company_image tag requires a Company instance"
msgstr ""
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr ""
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr ""
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr ""
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr ""
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr ""
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr ""
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr ""
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr ""
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr ""
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr ""
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr ""
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr ""
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr ""
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr ""
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr ""
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr ""
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr ""
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr ""
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr ""
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr ""
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr ""
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr ""
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr ""
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr ""
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr ""
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr ""
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr ""
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr ""
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr ""
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr ""
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr ""
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr ""
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr ""
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr ""
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr ""
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr ""
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr ""
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr ""
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr ""
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr ""
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr ""
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr ""
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr ""
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr ""
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr ""
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr ""
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr ""
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr ""
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr ""
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr ""
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr ""
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr ""
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr ""
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr ""
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr ""
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr ""
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr ""
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr ""
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr ""
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr ""
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr ""
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr ""
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr ""
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr ""
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr ""
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr ""
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr ""
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr ""
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr ""
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr ""
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr ""
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr ""
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr ""
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr ""
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr ""
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr ""
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr ""
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr ""
diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po
index 0d92420b68..694e7e6336 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "Không thể chuyển đổi {original} sang {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "Số lượng cung cấp không hợp lệ"
@@ -104,13 +105,13 @@ msgstr "Nhập ngày"
msgid "Invalid decimal value"
msgstr ""
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "Ghi chú"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "Mô tả"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
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:3045
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:1782
#: 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:4168
+#: 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:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "Tiền tệ"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "Trạng thái đặt hàng"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "Phiên bản cha"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr ""
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr ""
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr ""
msgid "Part"
msgstr "Nguyên liệu"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "Danh mục"
@@ -605,7 +593,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:136
msgid "Assigned to me"
msgstr "Đã gán cho tôi"
@@ -653,374 +641,365 @@ msgstr ""
msgid "Completed after"
msgstr ""
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr ""
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr ""
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr ""
-#: build/api.py:400
+#: build/api.py:414
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:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "Vật tư tiêu hao"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "Tuỳ chọn"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "Lắp ráp"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "Đã theo dõi"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "Có thể kiểm tra"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr ""
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "Đã cấp phát"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "Đã dùng"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "Bật đơn hàng"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr ""
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "Tạo đơn hàng"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "Địa điểm"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr ""
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr ""
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "Tạo đơn hàng"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "Dây chuyền BOM chưa được xác thực"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "Không thể tạo đơn hàng cho hàng hoá đang không hoạt động"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "Không thể tạo đơn hàng cho hàng hoá đang mở khoá"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr ""
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "Phải chọn người dùng hoặc nhóm"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "Sản phẩm đơn đặt bản dựng không thể thay đổi được"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr ""
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "Tham chiếu đơn đặt bản dựng"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "Tham chiếu"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr ""
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "Chọn sản phẩm để xây dựng"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "Tham chiếu đơn đặt bản dựng"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr ""
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "Địa điểm nguồn"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "Chọn địa điểm để lấy trong kho cho bản dựng này (để trống để lấy từ bất kỳ vị trí kho nào)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr ""
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr ""
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "Địa điểm đích"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "Chọn địa điểm nơi hàng hóa hoàn thiện sẽ được lưu kho"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "Xây dựng số lượng"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "Số kho hàng để dựng"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "Những mục hoàn thành"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "Số sản phẩm trong kho đã được hoàn thiện"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "Trnạg thái bản dựng"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "Mã trạng thái bản dựng"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "Mã lô hàng"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "Ngày tạo"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr ""
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr ""
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "Ngày hoàn thành mục tiêu"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "Ngày hoàn thành"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "hoàn thành bởi"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "Cấp bởi"
-#: build/models.py:402
+#: build/models.py:401
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:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "Chịu trách nhiệm"
-#: build/models.py:412
+#: build/models.py:419
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:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "Liên kết bên ngoài"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "Liên kết đến URL bên ngoài"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "Độ ưu tiên"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "Độ quan trọng của đơn đặt bản dựng"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "Mã dự án"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "Mã dự án cho đơn đặt bản dựng này"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr ""
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr ""
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "Không thể dỡ bỏ tác vụ để hoàn tất phân bổ"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "Đơn đặt bản dựng {build} đã được hoàn thành"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "Một đơn đặt bản dựng đã được hoàn thành"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
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:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "Không có đầu ra bản dựng đã được chỉ ra"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "Đầu ra bản dựng đã được hoàn thiện"
-#: build/models.py:1022
+#: build/models.py:960
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:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "Số lượng phải lớn hơn 0"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 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:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr ""
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, 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:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr ""
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr ""
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "Tạo mục đơn hàng"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "Dựng đối tượng"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "Dựng đối tượng"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "Số lượng"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "Yêu cầu số lượng để dựng đơn đặt"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr ""
-#: build/models.py:1888
+#: build/models.py:1827
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:1951
+#: build/models.py:1890
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:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr ""
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "Số lượng phải là 1 cho kho sê ri"
-#: build/models.py:1986
+#: build/models.py:1925
#, 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:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "Kho hàng đã bị phân bổ quá đà"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "Kho hàng"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "Kho hàng gốc"
-#: build/models.py:2103
+#: build/models.py:2042
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:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "Cài đặt vào"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "Kho hàng đích"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "Tạo cấp"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "Tên sản phẩm"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "Đầu ra bản dựng"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "Đầu ra xây dựng không hợp với bản dựng cha"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "Đầu ra sản phẩm không phù hợp với bản dựng đơn đặt hàng"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "Đầu ra bản dựng này đã được hoàn thành"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "Đầu ra bản dựng này chưa được phân bổ đầy đủ"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "Điền số lượng cho đầu ra bản dựng"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "Số lượng nguyên dương cần phải điền cho sản phẩm có thể theo dõi"
-#: build/serializers.py:344
+#: build/serializers.py:345
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:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "Số sê-ri"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "Nhập vào số sêri cho đầu ra bản dựng"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "Vị trí tồn kho cho sản phẩm"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "Số sêri tự cấp"
-#: build/serializers.py:385
+#: build/serializers.py:386
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:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "Danh sách đầu ra bản dựng phải được cung cấp"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "Vị trí kho cho đầu ra phế phẩm"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "Hủy phân bổ"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "Hủy bất kỳ phân kho nào cho đầu ra phế phẩm"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "Lý do loại bỏ đầu ra bản dựng"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "Vị trí cho đầu ra bản dựng hoàn thiện"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "Chấp nhận phân kho dang dở"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "Hoàn hiện đầu ra nếu kho chưa được phân bổ hết chỗ trống"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "Xử lý phân bổ kho hàng"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "Tiêu thụ bất kỳ hàng tồn kho nào đã được phân bổ cho dự án này."
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "Xóa toàn bộ đầu ra chưa hoàn thành"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "Xóa bất kỳ đầu ra bản dựng nào chưa được hoàn thành"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "Chưa được cấp phép"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "Chấp nhận trạng thái tiêu hao bởi đơn đặt bản dựng này"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "Phân bổ trước khi hoàn thiện đơn đặt bản dựng này"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "Kho quá tải"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "Bạn muốn thế nào để xử lý hàng trong kho được gán thừa cho đơn đặt bản dựng"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "Một vài hàng hóa đã được phân bổ quá thừa"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "Chấp nhận chưa phân bổ được"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "Chấp nhận hàng hóa không được phân bổ đầy đủ vào đơn đặt bản dựng này"
-#: build/serializers.py:793
+#: build/serializers.py:725
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:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "Chấp nhận không hoàn thành"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "Chấp nhận số yêu cầu của đầu ra bản dựng chưa được hoàn thành"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "Tạo đơn hàng có các đơn hàng đang mở"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "Tạo đơn hàng phải ở trạng thái sản xuất."
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "Đơn đặt bản dựng có đầu ra chưa hoàn thiện"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "Lộ giới"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "Đầu ra bản dựng"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "Đầu ra bản dựng phải chỉ đến bản dựng tương ứng"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "Mục chi tiết bản dựng"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "Hàng hóa phải trong kho"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Số lượng có sẵn ({q}) đã bị vượt quá"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "Đầu ra bản dựng phải được xác định cho việc phân sản phẩm được theo dõi"
-#: build/serializers.py:1006
+#: build/serializers.py:938
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:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "Hàng hóa phân bổ phải được cung cấp"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "Vị trí kho nơi sản phẩm được lấy ra (để trống để lấy từ bất kỳ vị trí nào)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "Ngoại trừ vị trí"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "Không bao gồm hàng trong kho từ vị trí đã chọn này"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "Kho trao đổi"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "Hàng trong kho thuộc nhiều vị trí có thể dùng thay thế được cho nhau"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "Kho thay thế"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "Cho phép phân kho sản phẩm thay thế"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "Mục tùy chọn"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "Phân bổ các mục hóa đơn vật liệu tùy chọn đến đơn đặt bản dựng"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr ""
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr ""
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr ""
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr ""
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr ""
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "BOM liên quan"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "ID hàng hoá BOM"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "Tên hàng hoá BOM"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr ""
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr ""
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "Sản phẩm nhà cung cấp"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "Số lượng đã phân bổ"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "Tạo liên quan"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "Tên danh mục hàng hoá"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "Có thể theo dõi"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "Được kế thừa"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "Cho phép biến thể"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "Mục BOM"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "Đang sản xuất"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr ""
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "Kho ngoài"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "Số hàng tồn"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "Kho hàng thay thế"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "Hàng tồn kho có sẵn"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr ""
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr ""
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr ""
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr ""
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr ""
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr ""
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr ""
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "Đợi duyệt"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "Sản xuất"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "Chờ"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "Đã hủy"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "Hoàn thành"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "Đơn đặt bản dựng {build} đã được hoàn thành"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "Một đơn đặt bản dựng đã được hoàn thành"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "Kho được yêu cầu cho đặt hàng bản dựng"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr ""
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "Đơn đặt bản dựng quá hạn"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "Đặt hàng bản dựng {bo} đang quá hạn"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "Đường dẫn"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "File"
-#: common/api.py:777
+#: common/api.py:787
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
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "Không có quyền xoá file đính kèm"
@@ -1554,794 +1553,835 @@ 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:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "Đã cập nhật"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
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:147
msgid "Update By"
msgstr ""
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr ""
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "Mã dự án duy nhất"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "Mô tả dự án"
-#: common/models.py:188
+#: common/models.py:191
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:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr ""
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "Giá trị cài đặt"
-#: common/models.py:843
+#: common/models.py:849
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:865
msgid "Value must be a boolean value"
msgstr "Giá trị phải là kiểu boolean"
-#: common/models.py:867
+#: common/models.py:873
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:881
msgid "Value must be a valid number"
msgstr ""
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr ""
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
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:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "Giá"
-#: common/models.py:1377
+#: common/models.py:1383
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:1434 common/models.py:1619
msgid "Endpoint"
msgstr "Đầu mối"
-#: common/models.py:1429
+#: common/models.py:1435
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:1445
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:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "Webhook có hoạt động không"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "Chữ ký số"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "Chữ ký số để truy cập"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "Bí mật"
-#: common/models.py:1469
+#: common/models.py:1475
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:1583 common/models.py:3270
msgid "Message ID"
msgstr "Mã Tin nhắn"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
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:1592
msgid "Host"
msgstr "Máy chủ"
-#: common/models.py:1587
+#: common/models.py:1593
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:1601
msgid "Header"
msgstr "Đầu mục"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "Đầu mục tin nhắn"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "Thân"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "Thân tin nhắn này"
-#: common/models.py:1614
+#: common/models.py:1620
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:1625
msgid "Worked on"
msgstr "Làm việc vào"
-#: common/models.py:1620
+#: common/models.py:1626
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:1752
msgid "Id"
msgstr "Mã"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "Tiêu đề"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: 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:1758
msgid "Published"
msgstr "Đã công bố"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "Tác giả"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "Tóm tắt"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "Đọc"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "Tin này đã được đọc?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "Tệp ảnh"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr ""
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr ""
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr ""
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr ""
-#: common/models.py:1847
+#: common/models.py:1853
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:1872
msgid "Unit name"
msgstr "Tên đơn vị"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "Biểu tượng"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "Biểu tượng đơn vị tùy chọn"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "Định nghĩa"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "Định nghĩa đơn vị"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "Đính kèm"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "Tập tin bị thiếu"
-#: common/models.py:1959
+#: common/models.py:1998
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:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr ""
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr ""
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "Chọn file đính kèm"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "Bình luận"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr ""
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr ""
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr ""
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr ""
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr ""
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr ""
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr ""
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr ""
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr ""
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "Giá trị"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr ""
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr ""
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr ""
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr ""
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr ""
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr ""
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr ""
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr ""
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr ""
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr ""
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr ""
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr ""
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr ""
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr ""
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr ""
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr ""
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr ""
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr ""
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr ""
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr ""
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr ""
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr ""
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr ""
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr ""
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr ""
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr ""
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr ""
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "Đã tạo"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr ""
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "Cập nhật lần cuối"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr ""
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr ""
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr ""
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr ""
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr ""
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr ""
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr ""
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr ""
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "Mẫu tham số"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr ""
-#: common/models.py:2479
+#: common/models.py:2655
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:2660
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:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "Lựa chọn phải duy nhất"
-#: common/models.py:2521
+#: common/models.py:2697
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:2719
msgid "Target model type for this parameter template"
msgstr ""
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "Tên tham số"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "Đơn vị"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "Đơn vị vật lý cho tham số này"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "Mô tả tham số"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "Ô lựa chọn"
-#: common/models.py:2571
+#: common/models.py:2747
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:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "Lựa chọn"
-#: common/models.py:2577
+#: common/models.py:2753
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:2764
msgid "Selection list for this parameter"
msgstr ""
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "Đã bật"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr ""
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr ""
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr ""
-#: common/models.py:2682
+#: common/models.py:2858
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:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr ""
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr ""
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr ""
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "Dữ liệu"
-#: common/models.py:2805
+#: common/models.py:2981
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:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "Ghi chú"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "Trường ghi chú tùy chọn"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr ""
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr ""
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr ""
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr ""
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr ""
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr ""
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "Ngữ cảnh"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr ""
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr ""
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "Kết quả"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr ""
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr ""
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr ""
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr ""
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr ""
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr ""
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr ""
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr ""
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr ""
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr ""
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr ""
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr ""
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr ""
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr ""
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr ""
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr ""
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr ""
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr ""
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr ""
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr ""
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr ""
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr ""
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr ""
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr ""
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr ""
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr ""
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr ""
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr ""
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr ""
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr ""
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "Mục đã nhận"
@@ -2451,25 +2491,25 @@ msgstr "Đối số từ khóa"
msgid "Task keyword arguments"
msgstr "Đối số từ khóa công việc"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr ""
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr ""
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr ""
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr ""
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "ngày"
@@ -2620,1030 +2660,1108 @@ 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"
+msgid "Upload Size Limit"
+msgstr ""
#: 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"
+msgid "Maximum allowable upload size for images and files"
+msgstr ""
#: 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:298
msgid "Require schema specification when validating URLs"
msgstr ""
-#: common/setting/system.py:316
+#: common/setting/system.py:303
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:304
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:310
msgid "Automatic Backup"
msgstr "Sao lưu tự động"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
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:316
msgid "Auto Backup Interval"
msgstr "Khoảng thời gian sao lưu tự động"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
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:323
msgid "Task Deletion Interval"
msgstr "Khoảng thời gian xóa tác vụ"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
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:332
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:333
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:339
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:341
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:348
msgid "Email Deletion Interval"
msgstr ""
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr ""
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr ""
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "Hỗ trợ mã vạch"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
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:369
msgid "Store Barcode Results"
msgstr ""
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr ""
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr ""
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr ""
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "Độ trễ quét mã vạch"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
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:388
msgid "Barcode Webcam Support"
msgstr "Hỗ trợ mã vạch qua webcam"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
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:394
msgid "Barcode Show Data"
msgstr ""
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr ""
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr ""
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr ""
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "Phiên bản Sản phẩm"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
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:418
msgid "Assembly Revision Only"
msgstr ""
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr ""
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr ""
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr ""
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "Mẫu IPN"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
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:434
msgid "Allow Duplicate IPN"
msgstr "Cho phép trùng IPN"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
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:440
msgid "Allow Editing IPN"
msgstr "Cho phép sửa IPN"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
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:446
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:447
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:452
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:453
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:458
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:459
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:464
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:465
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:471
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:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "Thành phần"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
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:488 part/models.py:1281
msgid "Purchaseable"
msgstr "Có thể mua"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
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:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "Có thể bán"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
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:501
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:506 part/models.py:1303
msgid "Virtual"
msgstr "Ảo"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
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:512
msgid "Show related parts"
msgstr "Hiển thị sản phẩm liên quan"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
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:518
msgid "Initial Stock Data"
msgstr "Số liệu tồn kho ban đầu"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
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:524
msgid "Initial Supplier Data"
msgstr "Dữ liệu nhà cung cấp ban đầu"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
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:532
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:533
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:539
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:540
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:545
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:547
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:558
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:560
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:571
msgid "Use Supplier Pricing"
msgstr "Sử dụng giá bán nhà cung cấp"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
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:579
msgid "Purchase History Override"
msgstr "Ghi đè lịch sử mua hàng"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
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:587
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:589
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:595
msgid "Stock Item Pricing Age"
msgstr "Tuổi giá kho hàng"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
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:604
msgid "Use Variant Pricing"
msgstr "Sử dụng giá biến thể"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
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:610
msgid "Active Variants Only"
msgstr "Chỉ các biến thể hoạt động"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
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:618
msgid "Auto Update Pricing"
msgstr ""
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr ""
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "Tần suất tạo lại giá"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
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:633
msgid "Internal Prices"
msgstr "Giá nội bộ"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
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:639
msgid "Internal Price Override"
msgstr "Ghi đè giá nội bộ"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
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:647
msgid "Allow BOM Zero Quantity"
msgstr ""
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "Bật in tem nhãn"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
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:661
msgid "Label Image DPI"
msgstr "DPI hỉnh ảnh tem nhãn"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
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:669
msgid "Enable Reports"
msgstr "Bật báo cáo"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "Cho phép tạo báo cáo"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "Chế độ gỡ lỗi"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
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:681
msgid "Log Report Errors"
msgstr ""
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 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:688
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:693
msgid "Enforce Parameter Units"
msgstr "Bắt buộc đơn vị tham số"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
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:701
msgid "Globally Unique Serials"
msgstr "Sê ri toàn cục duy nhất"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
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:707
msgid "Delete Depleted Stock"
msgstr "Xóa kho đã hết hàng"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr ""
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "Mẫu sinh mã theo lô"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
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:730
msgid "Stock Expiry"
msgstr "Quá hạn trong kho"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
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:736
msgid "Sell Expired Stock"
msgstr "Bán kho quá hạn"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
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:742
msgid "Stock Stale Time"
msgstr "Thời gian hàng cũ trong kho"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
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:751
msgid "Build Expired Stock"
msgstr "Dựng kho quá hạn"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
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:757
msgid "Stock Ownership Control"
msgstr "Kiểm soát sở hữu kho"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
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:763
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:764
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:769
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:770
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:775
msgid "Check BOM when installing items"
msgstr ""
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr ""
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr ""
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
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:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr ""
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr ""
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr ""
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr ""
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr ""
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr ""
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr ""
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr ""
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr ""
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr ""
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr ""
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr ""
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr ""
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "Bật đơn hàng trả lại"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "Bật chức năng đơn hàng trả lại trong giao diện người dùng"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "Mẫu tham chiếu đơn hàng trả lại"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr ""
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "Sửa đơn hàng trả lại đã hoàn thành"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "Cho phép sửa đơn hàng trả lại sau khi đã hoàn thành rồi"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "Mẫu tham chiếu đơn đặt hàng"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "Mẫu bắt buộc để tạo trường tham chiếu đơn đặt hàng"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "Vận chuyển mặc định đơn đặt hàng"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "Cho phép tạo vận chuyển mặc định với đơn đặt hàng"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "Sửa đơn đặt hàng đã hoàn thành"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "Cho phép sửa đơn đặt hàng sau khi đã vận chuyển hoặc hoàn thành"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr ""
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr ""
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr ""
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr ""
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "Mẫu tham chiếu đơn đặt mua"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
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:963
msgid "Edit Completed Purchase Orders"
msgstr "Sửa đơn đặt mua đã hoàn thành"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
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:971
msgid "Convert Currency"
msgstr ""
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr ""
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "Tự động hoàn thành đơn đặt mua"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr ""
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "Bật quên mật khẩu"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
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:992
msgid "Enable registration"
msgstr "Bật đăng ký"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
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:998
msgid "Enable SSO"
msgstr "Bật SSO"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
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:1004
msgid "Enable SSO registration"
msgstr "Bật đăng ký SSO"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
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:1012
msgid "Enable SSO group sync"
msgstr ""
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr ""
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr ""
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr ""
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr ""
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr ""
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "Yêu cầu email"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
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:1048
msgid "Auto-fill SSO users"
msgstr "Người dùng tự động điền SSO"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
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:1054
msgid "Mail twice"
msgstr "Thư 2 lần"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
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:1060
msgid "Password twice"
msgstr "Mật khẩu 2 lần"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
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:1066
msgid "Allowed domains"
msgstr "Các tên miền được phép"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
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:1074
msgid "Group on signup"
msgstr "Nhóm khi đăng ký"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "Bắt buộc MFA"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
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:1088
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:1093
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:1095
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:1102
msgid "Check for plugin updates"
msgstr "Kiểm tra cập nhật plugin"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr ""
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "Bật tích hợp URL"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
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:1116
msgid "Enable navigation integration"
msgstr "Bật tích hợp điều hướng"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
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:1123
msgid "Enable app integration"
msgstr "Bật tích hợp ứng dụng"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
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:1130
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:1131
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:1137
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:1138
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:1144
msgid "Enable interface integration"
msgstr ""
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr ""
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr ""
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr ""
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr ""
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr ""
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr ""
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr ""
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "Ngoại trừ vị trí bên ngoài"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr ""
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "Giai đoạn kiểm kê tự động"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr ""
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr ""
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr ""
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr ""
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr ""
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr ""
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr ""
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
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:1222
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:1227
msgid "Display User Profiles"
msgstr ""
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr ""
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr ""
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr ""
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr ""
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr ""
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr ""
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "Nhận báo cáo lỗi"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "Nhận thông báo khi có lỗi hệ thống"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr ""
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr ""
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr ""
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr ""
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr ""
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr ""
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr ""
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "Tên miền rỗng là không được phép."
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "Tên miền không hợp lệ: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr ""
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr ""
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "Nhà sản xuất"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "Doanh nghiêp"
@@ -4050,8 +4193,8 @@ msgstr "Số điện thoại liên hệ"
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
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "Liên hệ"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "Địa chỉ"
@@ -4195,12 +4338,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
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "Sản phẩm cơ bản"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr ""
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "Mã số nhà sản xuất"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "Nhà cung cấp"
@@ -4254,7 +4397,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:505
msgid "Supplier stock keeping unit"
msgstr "Đơn vị quản lý kho nhà cung cấp"
@@ -4282,16 +4425,16 @@ 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:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "chi phí cơ sở"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
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
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "Đóng gói"
@@ -4307,7 +4450,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:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "nhiều"
@@ -4331,23 +4474,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:881 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 ""
@@ -4503,7 +4646,7 @@ msgstr ""
msgid "Errors"
msgstr ""
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "Hợp lệ"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "Không rõ"
@@ -4719,7 +4862,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"
@@ -4743,117 +4886,118 @@ msgstr ""
msgid "Maximum value for progress type, required if type=progress"
msgstr ""
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "Tham chiếu đơn đặt"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr ""
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr ""
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "Tạo bởi"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr ""
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr ""
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr ""
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr ""
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr ""
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr ""
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr ""
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr ""
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr ""
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr ""
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr ""
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr ""
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr ""
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "Đặt hàng"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr ""
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "Sản phẩm nội bộ"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr ""
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "Đã hoàn thành"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr ""
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr ""
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ 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:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "Đơn hàng trả lại"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "Tổng tiền"
-#: order/models.py:91
+#: order/models.py:98
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:103 order/serializers.py:63
msgid "Order Currency"
msgstr "Tiền tệ đơn đặt hàng"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
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)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr ""
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "Liên hệ không phù hợp với doanh nghiệp đã chọn"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr ""
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr ""
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "Mô tả đơn đặt (tùy chọn)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
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:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "Liên kết đến trang bên ngoài"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr ""
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr ""
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "Ngày mục tiêu"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "Ngày mong muốn giao được hàng. Đơn đặt sẽ quá hạn sau ngày này."
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "Ngày phát hành"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "Ngày đặt hàng đã phát hành"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr ""
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt này"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "Đầu mối liên hệ của đơn đặt này"
-#: order/models.py:536
+#: order/models.py:575
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:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "Trạng thái"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "Trạng thái đơn đặt mua"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "Doanh nghiệp từ những hàng hóa đang được đặt mua"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "Tham chiếu nhà cung cấp"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "Mã tham chiếu đơn đặt nhà cung cấp"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "nhận bởi"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
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:743 order/models.py:2101
msgid "Destination"
msgstr "Đích đến"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr ""
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "Nhà cung cấp sản phẩm phải trùng với nhà cung cấp PO"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "Mục dòng không phù hợp với đơn đặt mua"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr ""
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "Số lượng phải là số dương"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: 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:1406
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:1419
msgid "Sales order status"
msgstr ""
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "Tham chiếu khách hàng "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
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:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "Ngày giao hàng"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "vận chuyển bằng"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr ""
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr ""
-#: order/models.py:1459
+#: order/models.py:1502
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:1506
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:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr ""
-#: order/models.py:1477
+#: order/models.py:1520
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:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr ""
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "Số lượng mặt hàng"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr ""
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr ""
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "Tham chiếu khoản riêng"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "Ghi chú khoản riêng"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "Mô tả khoản riêng (tùy chọn)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "Ngữ cảnh bổ sung"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "Đơn giá"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr ""
-#: order/models.py:1939
+#: order/models.py:1995
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:2003
msgid "Build order must be marked as external"
msgstr ""
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr ""
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr ""
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "Sản phẩm nhà cung cấp"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "Đã nhận"
-#: order/models.py:2000
+#: order/models.py:2070
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:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "Giá mua"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "Giá đơn vị mua"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr ""
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr ""
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr ""
-#: order/models.py:2143
+#: order/models.py:2213
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:2239
msgid "Sale Price"
msgstr "Giá bán"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "Giá bán đơn vị"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "Đã chuyển"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "Số lượng đã vận chuyển"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr ""
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr ""
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr ""
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "Ngày vận chuyển"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "Ngày giao hàng"
-#: order/models.py:2356
+#: order/models.py:2426
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:2434
msgid "Checked By"
msgstr "Kiểm tra bởi"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "Vận chuyển"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "Mã vận chuyển"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "Số theo dõi"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "Thông tin theo dõi vận chuyển"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "Mã hóa đơn"
-#: order/models.py:2390
+#: order/models.py:2460
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:2506
msgid "Shipment has already been sent"
msgstr "Vận đơn đã được gửi đi"
-#: order/models.py:2439
+#: order/models.py:2509
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:2516
msgid "Shipment must be checked before it can be completed"
msgstr ""
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr ""
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr ""
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "Hàng trong kho chưa được giao"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
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:2650 order/models.py:3705
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:2653 order/models.py:3708
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:2669 order/models.py:3724
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:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
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:2675
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:2676 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:2684 order/models.py:3735
msgid "Line"
msgstr "Dòng"
-#: order/models.py:2625
+#: order/models.py:2695
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:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "Hàng hóa"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "Chọn hàng trong kho để phân bổ"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "Nhập số lượng phân kho"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "Tham chiếu đơn hàng trả lại"
-#: order/models.py:2777
+#: order/models.py:2847
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:2860
msgid "Return order status"
msgstr "Trạng thái đơn hàng trả lại"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr ""
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr ""
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr ""
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr ""
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr ""
-#: order/models.py:3065
+#: order/models.py:3135
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:3150
msgid "Received Date"
msgstr "Ngày nhận được"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr ""
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "Kết quả"
-#: order/models.py:3094
+#: order/models.py:3164
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:3171
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:3181
msgid "Return Order Extra Line"
msgstr ""
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr ""
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr ""
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr ""
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr ""
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr ""
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr ""
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "Sao chép thông số"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr ""
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "Mục dòng"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr ""
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr ""
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr ""
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr ""
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "Tên nhà cung cấp"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
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:510 order/serializers.py:1700
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:520 order/serializers.py:1710
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:640
msgid "Order is not open"
msgstr "Đơn đặt là không được mở"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr ""
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr ""
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "Tiền tệ giá mua"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr ""
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr ""
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "Mã sản phẩm nội bộ"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr ""
-#: order/serializers.py:773
+#: order/serializers.py:775
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:778
msgid "Purchase order must be specified"
msgstr "Đơn đặt mua phải được chỉ định"
-#: order/serializers.py:784
+#: order/serializers.py:786
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:787
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:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "Mục dòng"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
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:864
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:871 stock/models.py:1192
#: 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:872
msgid "Enter expiry date for incoming stock items"
msgstr ""
-#: order/serializers.py:878
+#: order/serializers.py:880
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:890
msgid "Override packaging information for incoming stock items"
msgstr ""
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr ""
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "Mã vạch"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "Mã vạch đã quét"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "Mã vạch đã được dùng"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
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:1024
msgid "Destination location must be specified"
msgstr "Vị trí đích phải được chỉ ra"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
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:1156
msgid "Shipments"
msgstr ""
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "Vận đơn đã hoàn thành"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr ""
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "Tiền tệ giá bán"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr ""
-#: order/serializers.py:1600
+#: order/serializers.py:1602
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:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
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:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "Số lượng phải là số dương"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
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:1821 order/serializers.py:1951
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:1824 order/serializers.py:1954
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:1887 order/serializers.py:2885
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:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr ""
-#: order/serializers.py:2106
+#: order/serializers.py:2127
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:2137
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:2140
msgid "Line item has already been received"
msgstr "Line item đã nhận được"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
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:2253
msgid "Quantity to return"
msgstr ""
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "Tiền tệ giá đồng hạng"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "Mất"
@@ -5661,6 +5879,11 @@ msgstr "Hoàn tiền"
msgid "Reject"
msgstr "Từ chối"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "Đã cấp"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "Đơn đặt mua quá hạn"
@@ -5696,7 +5919,7 @@ msgstr ""
msgid "Filter by starred categories"
msgstr ""
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr ""
@@ -5704,7 +5927,7 @@ msgstr ""
msgid "Filter by category depth"
msgstr ""
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr ""
@@ -5712,7 +5935,7 @@ msgstr ""
msgid "Filter by top-level categories"
msgstr ""
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr ""
@@ -5732,75 +5955,79 @@ msgstr ""
msgid "Exclude sub-categories under the specified category"
msgstr ""
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr ""
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr ""
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr ""
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr ""
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr ""
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr ""
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr ""
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr ""
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr ""
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr ""
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr ""
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr ""
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr ""
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr ""
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr ""
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr ""
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr ""
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr ""
@@ -5809,11 +6036,11 @@ msgstr ""
msgid "Part Category"
msgstr "Danh mục sản phẩm"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
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"
@@ -5821,7 +6048,7 @@ msgstr "Điểm bán mặc định"
msgid "Default location for parts in this category"
msgstr "Vị trí mặc định cho sản phẩm trong danh mục này"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "Cấu trúc"
@@ -5837,12 +6064,12 @@ msgstr "Từ khóa mặc định"
msgid "Default keywords for parts in this category"
msgstr "Từ khóa mặc định cho sản phẩm trong danh mục này"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "Biểu tượng"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "Biểu tượng (tùy chọn)"
@@ -5862,984 +6089,1028 @@ 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:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "Bán nhiều"
-#: part/models.py:3308
+#: part/models.py:3372
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:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "Chi phí BOM tối thiểu"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "Chi phí thành phần sản phẩm tối thiểu"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "Chi phí BOM tối đa"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "Chi phí thành phần sản phẩm tối đa"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "Chi phí mua vào tối thiểu"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "Chi phí mua vào tối thiểu trong lịch sử"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "Chi phí mua tối đa"
-#: part/models.py:3346
+#: part/models.py:3410
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:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "Giá nội bộ tối thiểu"
-#: part/models.py:3353
+#: part/models.py:3417
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:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "Giá nội bộ tối đa"
-#: part/models.py:3360
+#: part/models.py:3424
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:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "Giá nhà cung ứng tối thiểu"
-#: part/models.py:3367
+#: part/models.py:3431
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:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "Giá nhà cung ứng tối đa"
-#: part/models.py:3374
+#: part/models.py:3438
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:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "Giá trị biến thể tối thiểu"
-#: part/models.py:3381
+#: part/models.py:3445
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:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "Chi phí biến thể tối đa"
-#: part/models.py:3388
+#: part/models.py:3452
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:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "Chi phí tối thiểu"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "Ghi đề chi phí tối thiểu"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "Chi phí tối đa"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "Ghi đề chi phí tối đa"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "Chi phí tối thiểu tính toán tổng thể"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "Chi phí tối đa tính toán tổng thể"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "Giá bán thấp nhất"
-#: part/models.py:3423
+#: part/models.py:3487
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:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "Giá bán cao nhất"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "Giá bán cao nhất dựa trên phá giá"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "Chi phí bán hàng tối thiểu"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "Giá bán hàng tối thiểu trong lịch sử"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "Giá bán hàng tối đa"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "Giá bán hàng tối đa trong lịch sử"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "Sản phẩm dành cho kiểm kê"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "Tổng số hàng"
-#: part/models.py:3468
+#: part/models.py:3532
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:3476
+#: part/models.py:3540
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:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "Ngày"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "Kiểm kê đã thực hiện"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "Chi phí kho tối thiểu"
-#: part/models.py:3489
+#: part/models.py:3553
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:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "Chi phí kho tối đa"
-#: part/models.py:3496
+#: part/models.py:3560
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:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr ""
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr ""
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr ""
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr ""
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr ""
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "Tên kiểm thử"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "Nhập tên cho kiểm thử"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr ""
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr ""
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "Mô tả kiểm thử"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "Nhập mô tả cho kiểm thử này"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr ""
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "Bắt buộc"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "Kiểm thử này bắt buộc phải đạt?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "Giá trị bắt buộc"
-#: part/models.py:3741
+#: part/models.py:3805
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:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "Yêu cầu đính kèm"
-#: part/models.py:3748
+#: part/models.py:3812
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:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr ""
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr ""
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr ""
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr ""
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "Chọn sản phẩm cha"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "Sản phẩm phụ"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "Chọn sản phẩm được dùng trong BOM"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "Số lượng BOM cho mục BOM này"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "Mục BOM này là tùy chọn"
-#: part/models.py:4000
+#: part/models.py:4132
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:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr ""
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr ""
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr ""
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr ""
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr ""
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr ""
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "Tham chiếu mục BOM"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "Ghi chú mục BOM"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "Giá trị tổng kiểm"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "Giá trị tổng kiểm dòng BOM"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "Đã xác minh"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "Mục BOM này là hợp lệ"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "Nhận thừa hưởng"
-#: part/models.py:4067
+#: part/models.py:4199
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:4073
+#: part/models.py:4205
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:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
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:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "Sản phẩm phụ phải được chỉ định"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "Sảm phẩm thay thế mục BOM"
-#: part/models.py:4364
+#: part/models.py:4496
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:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "Hàng hóa BOM cha"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "Sản phẩm thay thế"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "Sản phẩm 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "Sản phẩm 2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "Chọn sản phẩm liên quan"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr ""
-#: part/models.py:4436
+#: part/models.py:4568
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:4441
+#: part/models.py:4573
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:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr ""
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr ""
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "Phụ mục"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr ""
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr ""
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
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:305
msgid "File is not an image"
msgstr ""
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "Sản phẩm gốc"
-#: part/serializers.py:397
+#: part/serializers.py:416
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:421
msgid "Copy Image"
msgstr "Sao chép ảnh"
-#: part/serializers.py:403
+#: part/serializers.py:422
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:428
msgid "Copy BOM"
msgstr "Sao chép BOM"
-#: part/serializers.py:410
+#: part/serializers.py:429
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:436
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:442
msgid "Copy Notes"
msgstr "Sao chép ghi chú"
-#: part/serializers.py:424
+#: part/serializers.py:443
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:449
msgid "Copy Tests"
msgstr ""
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr ""
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "Số liệu tồn kho ban đầu"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào."
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "Vị trí kho ban đầu"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này"
-#: part/serializers.py:476
+#: part/serializers.py:495
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:511
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:521
msgid "Manufacturer part number"
msgstr "Mã số nhà sản xuất"
-#: part/serializers.py:509
+#: part/serializers.py:528
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:537
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:548
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:555
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:840
msgid "Category Name"
msgstr "Tên danh mục"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "Đang dựng"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr ""
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr ""
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "Hàng trong kho"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr ""
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr ""
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr ""
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "Nhân bản sản phẩm"
-#: part/serializers.py:969
+#: part/serializers.py:997
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:1003
msgid "Initial Stock"
msgstr "Số liệu kho ban đầu"
-#: part/serializers.py:976
+#: part/serializers.py:1004
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:1010
msgid "Supplier Information"
msgstr "Thông tin nhà cung cấp"
-#: part/serializers.py:983
+#: part/serializers.py:1011
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:1020
msgid "Copy Category Parameters"
msgstr "Sao chép thông số nhóm hàng"
-#: part/serializers.py:993
+#: part/serializers.py:1021
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:1026
msgid "Existing Image"
msgstr "Ảnh hiện có"
-#: part/serializers.py:999
+#: part/serializers.py:1027
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:1044
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:1176
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:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "Có thể dựng"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr ""
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr ""
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr ""
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr ""
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr ""
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr ""
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr ""
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr ""
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr ""
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr ""
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr ""
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr ""
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "Giá thấp nhất"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
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:1501
msgid "Minimum price currency"
msgstr "Tiền tế giá tối thiểu"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "Giá cao nhất"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
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:1516
msgid "Maximum price currency"
msgstr "Tiền tế giá tối đa"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "Cập nhật"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
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:1569
#, 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:1576
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:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr ""
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr ""
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
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:2025
msgid "Remove Existing Data"
msgstr "Xóa dữ liệu đã tồn tại"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
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:2031
msgid "Include Inherited"
msgstr "Bao gồm thừa hưởng"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
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:2037
msgid "Skip Invalid Rows"
msgstr "Bỏ qua dòng không hợp lệ"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
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:2043
msgid "Copy Substitute Parts"
msgstr "Sao chép sản phẩm thay thế"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
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"
@@ -7091,15 +7362,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 ""
@@ -7160,7 +7431,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
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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"
@@ -7762,7 +8033,7 @@ msgstr ""
msgid "Plugin"
msgstr "Phần bổ sung"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "Không tìm thấy tác giả"
@@ -8021,7 +8292,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 ""
@@ -8065,112 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "Vật liệu cần có"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "Ảnh sản phẩm"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "Đã cấp"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "Bắt buộc cho"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "Số sê-ri"
@@ -8292,7 +8560,7 @@ msgstr "Báo cáo kiểm thử mặt hàng"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "Mục đã cài đặt"
@@ -8325,6 +8593,10 @@ msgstr "Không có kết quả (bắt buộc)"
msgid "No result"
msgstr "Không có kết quả"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr ""
@@ -8353,491 +8625,499 @@ msgstr "thẻ part_image yêu cầu 1 thực thể sản phẩm"
msgid "company_image tag requires a Company instance"
msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr ""
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr ""
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr ""
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr ""
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr ""
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr ""
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr ""
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr ""
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr ""
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr ""
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr ""
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr ""
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr ""
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "Mã trạng thái"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "Địa điểm bên ngoài"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr ""
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr ""
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "Cây sản phẩm"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr ""
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr ""
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr ""
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr ""
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "Ngày hết hạn trước đó"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "Ngày hết hạn sau đó"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "Ế"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr ""
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr ""
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr ""
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr ""
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "Bắt buộc nhập số lượng"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "Phải cung cấp sản phẩm hợp lệ"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr ""
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr ""
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr ""
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr ""
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr ""
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr ""
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr ""
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "Loại vị trí kho hàng"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "Loại vị trí kho hàng"
-#: stock/models.py:100
+#: stock/models.py:101
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:148 stock/models.py:1077
msgid "Stock Location"
msgstr "Kho hàng"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "Vị trí kho hàng"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "Chủ sở hữu"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "Chọn chủ sở hữu"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "Bên ngoài"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "Đây là vị trí kho bên ngoài"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "Loại vị trí"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "Loại vị trí kho hàng của địa điểm này"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr ""
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr ""
-#: stock/models.py:911
+#: stock/models.py:925
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:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 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:980
#, 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:990 stock/models.py:1003
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:993
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:1015
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:1020
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:1033
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:1047
msgid "Parent Stock Item"
msgstr "Hàng trong kho cha"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "Sản phẩm cơ bản"
-#: stock/models.py:1044
+#: stock/models.py:1069
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:1081
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:1089 stock/serializers.py:1709
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:1095
msgid "Installed In"
msgstr "Đã cài đặt trong"
-#: stock/models.py:1075
+#: stock/models.py:1100
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:1119
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:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "Mã lô cho hàng trong kho này"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "Số lượng tồn kho"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "Bản dựng nguồn"
-#: stock/models.py:1129
+#: stock/models.py:1154
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:1161
msgid "Consumed By"
msgstr "Tiêu thụ bởi"
-#: stock/models.py:1139
+#: stock/models.py:1164
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:1173
msgid "Source Purchase Order"
msgstr "Đơn đặt mua nguồn"
-#: stock/models.py:1152
+#: stock/models.py:1177
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:1183
msgid "Destination Sales Order"
msgstr "Đơn hàng bán đích"
-#: stock/models.py:1169
+#: stock/models.py:1194
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:1212
msgid "Delete on deplete"
msgstr "Xóa khi thiếu hụt"
-#: stock/models.py:1188
+#: stock/models.py:1213
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:1234
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:1265
msgid "Converted to part"
msgstr "Đã chuyển đổi sang sản phẩm"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr ""
-#: stock/models.py:1893
+#: stock/models.py:1954
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:1960
msgid "Quantity must be integer"
msgstr "Số lượng phải là số nguyên"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, 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:1974
msgid "Serial numbers must be provided as a list"
msgstr ""
-#: stock/models.py:1918
+#: stock/models.py:1979
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:1997
msgid "Cannot assign stock to structural location"
msgstr ""
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr ""
-#: stock/models.py:2071
+#: stock/models.py:2132
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:2136
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:2139
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:2142
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:2145 stock/models.py:2331
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:2148
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:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "Mặt hàng trùng lặp"
-#: stock/models.py:2098
+#: stock/models.py:2159
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:2167
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:2172
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:2476
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:2978
msgid "Stock Item Tracking"
msgstr ""
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "Ghi chú đầu vào"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr ""
-#: stock/models.py:3026
+#: stock/models.py:3099
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:3103
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:3108
msgid "Invalid value for this test"
msgstr ""
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "Kết quả kiểm thử"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "Giá trị đầu ra kiểm thử"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 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:3151
msgid "Test notes"
msgstr "Ghi chú kiểm thử"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr ""
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr ""
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr ""
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr ""
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr ""
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr ""
@@ -8913,214 +9193,234 @@ msgstr "Sử dụng kích thước đóng gói khi thêm: Số lượng được
msgid "Use pack size"
msgstr ""
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "Điền số sêri cho hàng hóa mới"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
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:654 users/models.py:185
msgid "Expired"
msgstr "Đã hết hạn"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "Mục con"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr ""
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "Giá mua của mặt hàng, theo đơn vị hoặc gói"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "Nhập số của mặt hàng cần tạo số nối tiếp"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr ""
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "Số lượng phải không vượt quá số lượng trong kho đang có ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "Vị trí kho đích"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "Không thể gán số sêri cho sản phẩm này"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "Số sêri đã tồn tại"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "Chọn mặt hàng để lắp đặt"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "Số lượng để cài đặt"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "Nhập số lượng hàng hóa để cài đặt"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "Thêm ghi chú giao dịch (tùy chọn)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "Số lượng cần cài đặt phải ít nhất là 1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "Mặt hàng không khả dụng"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "Sản phẩm đã chọn không có trong hóa đơn vật liệu"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "Số lượng cần lắp đặt phải không vượt quá số lượng đang có"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "Chọn sản phẩm để chuyển đổi mặt hàng vào bên trong"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "Sản phẩm đã chọn không phải là tùy chọn hợp lệ để chuyển đổi"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "Không thể chuyển đổi hàng hóa với sản phẩm nhà cung cấp đã gán"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "Mã trạng thái mặt hàng"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "Chọn mặt hàng để đổi trạng thái"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "Không có mặt hàng nào được chọn"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "Kho phụ"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr ""
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "Sản phẩm phải có thể bán được"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "Hàng hóa được phân bổ đến một đơn hàng bán"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "Hàng hóa được phân bổ đến một đơn đặt bản dựng"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "Khách hàng được gán vào các mặt hàng"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "Công ty đã chọn không phải là khách hàng"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "Ghi chú phân bổ kho"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "Phải cung cấp danh sách mặt hàng"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "Ghi chú gộp kho"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "Cho phép nhiều nhà cung không khớp"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "Cho phép mặt hàng cùng sản phẩm nhà cung cấp khác phải được gộp"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "Cho phép trạng thái không khớp"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "Cho phép mặt hàng với mã trạng thái khác nhau để gộp lại"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "Cần cung cấp ít nhất hai mặt hàng"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr ""
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "Giá trị khóa chính mặt hàng"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr ""
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr ""
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr ""
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "Ghi chú giao dịch kho"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr ""
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr ""
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr ""
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr ""
@@ -9458,150 +9758,158 @@ 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 ""
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "Quản trị"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "Đơn mua hàng"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "Đơn hàng bán"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "Đơn hàng trả lại"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "Tên người dùng"
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 e6e6c13d9d..d0ad79472e 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "不能将 {original} 转换到 {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "提供的数量无效"
@@ -104,13 +105,13 @@ msgstr "输入日期"
msgid "Invalid decimal value"
msgstr "无效的数值"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "备注"
@@ -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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "描述"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "描述(选填)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "必须是有效数字"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "货币"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "订单状态"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "父级生产订单"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "包含变体"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "包含变体"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "包含变体"
msgid "Part"
msgstr "零件"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "类别"
@@ -605,7 +593,7 @@ msgstr "类别"
msgid "Ancestor Build"
msgstr "可测试部分"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "分配给我"
@@ -653,374 +641,365 @@ msgstr "完成日期早于"
msgid "Completed after"
msgstr "完成日期晚于"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "最小日期"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "最大日期"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "排除树"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "生产订单必须取消后才能删除"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "耗材"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "可选项"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "装配件"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "可追溯"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "需检测"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "未结算订单"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "已分配"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "已消耗"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "已订购"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
msgstr "未找到版本"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "生产订单"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "库存位置"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "产出"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项。"
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "生产订单"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "装配物料清单尚未验证"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "无法为未激活的零件创建生产订单"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "无法为已解锁的零件创建生产订单"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "生产订单仅能通过外部采购可购买零件来完成"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "必须指定负责的用户或组"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "生产订单关联零件不可变更"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "目标日期必须在开始日期之后"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "生产订单编号"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "编号"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "生产订单的简要说明(可选)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
msgstr "该生产订单所属的上级生产订单"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "选择要生产的零件"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "销售订单编号"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
msgstr "该生产订单关联的销售订单"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "源库位"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "指定本次生产领料的来源库位(留空可从任意库位调拨)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "外协生产"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "该生产订单由外部供应商完成"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "目标库位"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "选择生产完成品的存放库位"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "生产数量"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "需要生产的库存品数量"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "已完成项目"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "已完成并入库的库存物品数量"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "生产状态"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "生产状态代码"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "批号"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "建立日期"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "生产开始日期"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "此生产订单的计划开始日期"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "计划完成日期"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "完成日期"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "完成人"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "发起人"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "创建该生产订单的用户"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "责任方"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "该生产订单的责任人或责任团队"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "外部链接"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "指向外部资源的URL链接"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "生产优先级"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "此生产订单的优先级"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "项目编号"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "该生产订单归属的项目编号"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "无法完成生产订单,存在未关闭的子生产订单"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "无法完成生产订单,存在未完成的产出项"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "生产分配任务卸载失败"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "生产订单 {build} 已完成"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "生产订单已完成"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "可追溯零件必须填写序列号"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "未指定产出"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "产出已完成"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "产出与生产订单不匹配"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "数量必须大于零"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "数量不能大于产出数量"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "产出未通过所有必要测试"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "产出 {serial} 未通过所有必要测试"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
msgstr "已分配的库存物料仍在生产中"
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
msgstr "存在已分配物料时无法部分完成生产输出"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "生产订单行项目"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "生产对象"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "生产对象"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "数量"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "生产订单所需数量"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "库存消耗量"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "所选库存项与物料清单行项不匹配"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
msgstr "分配的数量必须大于零"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "序列化物料的数量必须为1"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "库存品项超额分配"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "库存项"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "源库存项"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "分配给该生产任务的库存量"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "安裝到"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "目标库存项"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "生产等级"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "零件名称"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "产出"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "生产产出与上级订单不匹配"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "产出零件与生产订单零件不匹配"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "此产出已经完成"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "此产出尚未完全分配"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "输入产出数量"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "可追踪的零件数量必须为整数"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "序列号"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "输入产出的序列号"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "生产产出的库存地点"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "自动分配序列号"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "自动为所需项目分配对应的序列号"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "以下序列号已存在或无效"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "必须提供产出清单"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "报废品库存地点"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "放弃分配"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "取消对报废产品的库存分配"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "废品产出的原因"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "完工产出存放库位"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "接受不完整的分配"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "如果库存尚未全部分配,则完成产出"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "消耗已分配库存"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "立即扣除已分配给该生产任务的库存"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "移除未完成的产出"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "删除所有未完成的产出"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "禁止操作"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "标记为当前生产订单消耗"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "完成此生产订单前取消分配"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "超额分配库存"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "如何处理分配给生产订单的超额库存"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "存在超额分配的库存项"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "接受未分配"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "接受库存项未被完全分配至生产订单"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "必需库存未完成全量分配"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "接受未完工"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "允许所需数量的产出未完成"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "生产需求数量未完成"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "生产订单有打开的子生产订单"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "生产订单必须处于生产状态"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "生产订单有未完成的产出"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "生产行"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "产出"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "生产产出必须指向相同的生产"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "生产行项目"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part 必须与生产订单零件相同"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "项目必须在库存中"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "可用量 ({q}) 超出限制"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "对于被追踪的零件的分配,必须指定生产产出"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "对于未被追踪的零件,无法指定生产产出"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "必须提供分配项目"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "零件来源的库存地点(留空则可来源于任何库存地点)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "排除位置"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "从该选定的库存地点排除库存项"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "可互换库存"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "在多个位置的库存项目可以互换使用"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "替代品库存"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "允许分配可替换的零件"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "可选项目"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "分配可选的物料清单给生产订单"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "所有物料"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
msgstr "未跟踪的物品"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
msgstr "已跟踪的物品"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "物品类型"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
msgstr "选择要自动分配的条目类型"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "物料清单参考"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "物料清单零件识别号码"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "物料清单零件名称"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "安裝到"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "生产"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "供应商零件"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "已分配数量"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "生产订单编号"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "零件类别名称"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "可追踪"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "已继承的"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "允许变体"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "物料清单项"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "生产中"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "生产计划"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "外部库存"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "可用库存"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "可用的替代品库存"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "可用的变体库存"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "消耗数量超过分配数量"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "库存消耗可选备注"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "生产物料项必须关联到正确的生产订单"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "重复的生产物料项分配"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "订单行项目必须关联到正确的生产订单"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "重复的订单行项目分配"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "必须提供至少一个物料项或行项目"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "待生产"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "生产中"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "已暂停"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "已取消"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "完成"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "生产订单 {build} 已完成"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "生产订单已完成"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "生产订单所需库存"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "生产订单{build}需补充库存"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "逾期的生产订单"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "生产订单 {bo} 现已逾期"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "是否链接"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "是否为文件"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "用户没有权限删除此附件"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr "用户没有编辑此附件的权限"
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "用户没有权限删除此附件"
@@ -1554,794 +1553,835 @@ msgstr "暂无插件"
msgid "Project Code Label"
msgstr "项目编号标签"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "已是最新"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "最后更新时间戳"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "更新于"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "上次修改该对象的用户"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "唯一项目编码"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "项目描述"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "负责此项目的用户或团队"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "设置密钥"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "设定值"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "所选值不是一个有效的选项"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "该值必须是布尔值"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "该值必须为整数"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "必须是有效数字"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "值未通过验证检查"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "批发价数量"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "价格"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "指定数量的单位价格"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "端点"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "接收此网络钩子的端点"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "此网络钩子的名称"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "网络钩子是否已启用"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "令牌"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "访问令牌"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "密钥"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "HMAC共享密钥"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "消息ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "此邮件的唯一标识符"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "主机"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "接收此消息的主机"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "标题"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "此消息的标题"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "正文"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "此消息的正文"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "接收此消息的终点"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "工作于"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "这条消息的工作完成了吗?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "标识"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "标题"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "链接"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "已发布"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "作者"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "摘要"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "阅读"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "这条新闻被阅读了吗?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "图像文件"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "此图像的目标模型类型"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "此图像的目标型号ID"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "自定义单位"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "单位符号必须唯一"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "单位名称必须是有效的标识符"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "单位名称"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "符号"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "可选单位符号"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "定义"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "单位定义"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "附件"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "缺少文件"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "缺少外部链接"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr "没有要重命名的文件"
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr "文件名不能为空"
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr "无效的文件名"
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr "无法更改文件扩展名"
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr "已存在同名文件"
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr "重命名文件保存失败"
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "模型类型"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "图片的目标模型类型"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "选择附件"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "备注"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "附件备注"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "上传日期"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "上传文件的日期"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "文件大小"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "文件大小,以字节为单位"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "为附件指定的模型类型无效"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "自定状态"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "定制状态"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "参考状态设置"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "使用此自定义状态扩展状态的状态集"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "逻辑密钥"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "值"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "将保存至模型数据库的数值"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "状态名"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "标签"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "将在前端显示的标签"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "颜色"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "将在前端显示颜色"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "型号"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "该状态关联的模型"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "必须选定模型"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "必须选取密钥"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "必须选中逻辑密钥"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "密钥必须不同于逻辑密钥"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "必须提供有效的参考状态类"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "密钥必须不同于参考状态的逻辑密钥"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "逻辑密钥必须在参考状态的逻辑键中"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "选择列表"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "选择列表"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "选择列表的名称"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "选择列表的描述"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "已锁定"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "此选择列表是否已锁定?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "能否使用此选择列表?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "源插件"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "提供选择列表的插件"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "源字符串"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "可选字符串,用于标识本列表的数据来源"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "缺省项"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "本选择列表的默认选项"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "已创建"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "选择列表的创建日期和时间"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "最近更新"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "选择列表的最后更新时间"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "选择列表项"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "选择列表项"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "此选项归属的选择列表"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "选择列表项的值"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "选择列表项的标签"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "选择列表项的描述"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "该选择列表项是否处于激活状态?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "参数模板"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
msgstr "参数模板"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "勾选框参数不能有单位"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "复选框参数不能有选项"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "选择必须是唯一的"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "参数模板名称必须是唯一的"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
msgstr "此参数模板的目标模型类型"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "参数名称"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "单位"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "此参数的物理单位"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "参数说明"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "勾选框"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "此参数是否为勾选框?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "选项"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "此参数的有效选择 (逗号分隔)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "此参数的选择列表"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "已启用"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
msgstr "此参数模板是否启用?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "参数"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "参数"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "无效的参数值选择"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
msgstr "为附件指定的模型类型无效"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
msgstr "型号ID"
-#: common/models.py:2789
+#: common/models.py:2965
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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
msgstr "参数模板"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "数据"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "参数值"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "备注"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "可选注释字段"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "扫描条码"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "条码数据"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "扫描条码的用户"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "时间戳"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "扫描条形码的日期和时间"
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr "处理条码的 URL 端点"
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "上下文"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "扫描条形码的上下文数据"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "响应"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "结果"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "条码扫描成功吗?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "发生错误"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "电子邮件信息"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "电子邮箱信息"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "已发布"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "已发送"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "失败"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "已送达"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "已确认"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "入站"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "出站"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "暂无回复消息"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "跟踪交付"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "已读追踪"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "点击追踪"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "全局ID"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "此消息的标识符 (可能由外部系统提供)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "主题 ID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "此消息主题的标识符 (可能由外部系统提供)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "主题"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "链接到此消息的主题"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "优先"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "邮件主题"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "邮件主题"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "此主题的唯一密钥 (用于识别主题)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "此主题的唯一标识符"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "内部服务已启动"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "该线程是否为内部启动的?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "创建主题的日期和时间"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "主题最后更新的日期和时间"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "收到的物品"
@@ -2451,25 +2491,25 @@ msgstr "关键字参数"
msgid "Task keyword arguments"
msgstr "任务关键词参数"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "模型类型"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "用户无权为此模式创建或编辑附件"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
msgstr "用户没有权限为此模型创建或编辑参数"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "选择列表已锁定"
@@ -2547,19 +2587,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 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "天"
@@ -2620,1030 +2660,1108 @@ msgid "Currency update plugin to use"
msgstr "使用货币更新插件"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "从URL下载"
+msgid "Upload Size Limit"
+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 "下载大小限制"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "验证 URL 时需要 schema 规范"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "更新检查间隔"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "检查更新的频率(设置为零以禁用)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "自动备份"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "启用数据库和媒体文件的自动备份"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "自动备份间隔"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "指定自动备份之间的间隔天数"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "任务删除间隔"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "后台任务结果将在指定天数后删除"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "错误日志删除间隔"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "错误日志将在指定天数后被删除"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "通知删除间隔"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "用户通知将在指定天数后被删除"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "邮件自动清理周期"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "邮件将在指定天数后删除"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "保护邮件日志"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "防止邮件日志条目被删除"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "条形码支持"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "在网页界面启用条形码扫描器支持"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "存储条形码结果"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "存储条形码扫描结果"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "条形码扫描最大计数"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "保存的条形码扫描结果的最大数量"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "条形码扫描延迟设置"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "条形码输入处理延迟时间"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "启用摄像头扫码支持"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "允许通过网络摄像头扫描条形码"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "显示条形码数据"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "在浏览器中将条形码数据显示为文本"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "条形码生成插件"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "用于内部条形码数据生成的插件"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "零件修订"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "启用零件修订字段"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "仅限装配修订版本"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "仅允许对装配零件进行修订"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "允许从装配中删除"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "允许删除已在装配中使用的零件"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN(内部零件号)正则规则"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "用于匹配IPN(内部零件号)格式的正则表达式"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "允许重复的 IPN(内部零件号)"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "允许多个零件共享相同的 IPN(内部零件号)"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "允许编辑 IPN(内部零件号)"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "允许编辑零件时更改IPN(内部零件号)"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "复制零件物料清单数据"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "复制零件时默认复制物料清单数据"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "复制零件参数数据"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "复制零件时默认复制参数数据"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "复制零件测试数据"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "复制零件时默认复制测试数据"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "复制类别参数模板"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "创建零件时复制类别参数模板"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "零件默认为模板"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "组件"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "默认情况下,零件可用作子部件"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "可购买"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "默认情况下可购买零件"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "可销售"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "零件默认为可销售"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "默认情况下可跟踪零件"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "虚拟的"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "默认情况下,零件是虚拟的"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "显示关联零件"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "显示零件的关联零件"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "允许创建初始库存"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "允许在添加新零件时创建初始库存数据"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "允许创建供应商数据"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "允许在添加新零件时创建初始供应商数据"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "零件名称显示格式"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "显示零件名称的格式"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "零件类别默认图标"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "零件类别默认图标 (空表示没有图标)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "最小定价小数位数"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "呈现定价数据时显示的最小小数位数"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "最大定价小数位数"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "呈现定价数据时显示的最大小数位数"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "使用供应商定价"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "将供应商的批发价纳入整体价格计算"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "采购历史价优先"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "当存在历史采购订单价格时,将忽略供应商的批发价"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "使用库存项定价"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "使用手动输入的库存数据进行定价计算"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "库存项目定价时间"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "从定价计算中排除超过此天数的库存项目"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "使用变体定价"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "将产品变体的特殊定价纳入整体价格计算"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "仅限活跃变体"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "仅使用活跃变体零件计算变体价格"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "自动更新定价"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "当内部数据变化时自动更新零件价格"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "价格重建间隔"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "零件价格自动更新前的天数"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "内部价格"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "为零件启用内部核算价格功能"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "内部价格优先"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "若存在内部价格,将覆盖BOM价格区间计算结果"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
msgstr "允许BOM数量为零"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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:655
msgid "Enable label printing"
msgstr "启用标签打印功能"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "启用从网络界面打印标签"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "标签图片 DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "启用报告"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "启用报告生成"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "调试模式"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "以调试模式生成报告(HTML 输出)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "日志错误报告"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "页面大小"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "PDF 报告默认页面大小"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "强制参数单位"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "如果提供了单位,参数值必须与指定的单位匹配"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "全局唯一序列号"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "库存项的序列号必须全局唯一"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "删除已耗尽的库存"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "设置库存耗尽时的默认行为"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr "删除序列化库存"
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr "允许删除带有序列号的库存商品"
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "批号模板"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "为库存项生成默认批号的模板"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "库存过期"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "启用库存过期功能"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "销售过期库存"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "允许销售过期库存"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "库存临期预警天数"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "库存项过期前被标记为\"临期\"的天数"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "允许使用过期库存"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "允许在生产中使用已过期的库存"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "库存所有权管控"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "启用对库存地点和库存物品的归属权管理"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "库存地点默认图标"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "库存地点默认图标 (空表示没有图标)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "显示已安装的库存项"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "在库存列表中显示已被安装到设备中的库存项"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "在安装项目时检查物料清单"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "已安装的库存项目必须存在于上级零件的物料清单中"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "允许零库存调拨"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "生产订单参考模式"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "必须为每个订单分配一个负责人"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "需要活动零件"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "防止为非活动零件创建生产订单"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "需要锁定零件"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "防止为未锁定的零件创建生产订单"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "需要有效的物料清单"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "除非物料清单已验证,否则禁止创建生产订单"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "需要关闭子订单"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "在所有子订单关闭之前,阻止生产订单的完成"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "外部生产订单"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "启用外部生产订单功能"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr "需要外部生产订单"
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr "从外部供应商订购组装好的零件时,需要外部生产订单"
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "阻止直到测试通过"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "在所有必要的测试通过之前,阻止产出完成"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "启用订单退货"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "在用户界面中启用订单退货功能"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "退货订单参考模式"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "生成退货订单参考字段所需的模式"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "编辑已完成的退货订单"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "允许编辑已完成的退货订单"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "销售订单参考模式"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "生成销售订单参考字段所需参照模式"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "销售订单默认配送方式"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "启用创建销售订单的默认配送功能"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "编辑已完成的销售订单"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "允许在订单配送或完成后编辑销售订单"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
msgstr "货件需核对"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
msgstr "只有所有物品均经核对,才能确认发货完成"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "标记该订单为已完成?"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr "阻止未完成项目测试"
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr "如果所需的物料测试未完成,则阻止将库存物料分配给销售订单"
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "采购订单参考模式"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "生成采购订单参考字段所需的模式"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "编辑已完成的采购订单"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "允许在采购订单已配送或完成后编辑订单"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "货币转换"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "收货时将物料价值折算为基准货币"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "自动完成采购订单"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "当收到所有行项目时,自动将采购订单标记为完成"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "忘记启用密码"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "在登录页面上启用忘记密码功能"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "启用注册"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "在登录页面为用户启用自行注册功能"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "启用SSO登录"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "在登录页面启用单点登录(SSO)功能"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "启用SSO注册"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "允许用户通过登录页面的SSO系统注册账号"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "启用SSO组同步"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "启用后,将自动同步InvenTree用户组与身份提供商(IdP)提供的用户组"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "SSO组属性键"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr "身份提供商(IdP)返回的组信息声明属性名称"
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr "SSO组映射关系"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "移除非SSO来源的用户组"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "必须提供邮箱"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "用户注册时必须提供邮箱"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "自动填充SSO用户信息"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "自动从SSO账户数据中填充用户详细信息"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "发两次邮件"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "注册时询问用户他们的电子邮件两次"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "两次输入密码"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "当注册时请用户输入密码两次"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "域名白名单"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "注册默认分组"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "强制启用多因素安全认证"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "用户必须使用多因素安全认证。"
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
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:1093
msgid "Check plugins on startup"
msgstr "启动时检查插件"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用"
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "检查插件更新"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "启用定期检查已安装插件的更新"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "启用统一资源定位符集成"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "启用插件以添加统一资源定位符路由"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "启用导航集成"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "启用插件以集成到导航中"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "启用应用集成"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "启用插件添加应用"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "启用调度集成"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "启用插件来运行预定任务"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "启用事件集成"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "启用插件响应内部事件"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "启用界面集成"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "启用插件集成到用户界面"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "启用邮件集成"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "启用插件来处理发送/接收邮件"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "启用项目编码"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "启用项目编码来跟踪项目"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
msgstr "启用盘点"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "启用历史库存水平及价值记录功能"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "排除外部地点"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
msgstr "将外部库位的库存物料排除在盘点计算之外"
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "自动盘点周期"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
msgstr "自动库存盘点记录的间隔天数"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
msgstr "删除旧的盘点记录条目"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
msgstr "删除超过指定天数的库存盘点记录"
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
msgstr "库存盘点记录删除周期"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
msgstr "库存盘点记录将在指定天数后自动删除"
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "删除旧的库存跟踪记录"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
msgstr "删除超过指定天数的库存跟踪记录"
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
msgstr "库存跟踪记录删除周期"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
msgstr "库存跟踪记录将在指定天数后自动删除"
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "显示用户全名"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "显示用户全名而不是用户名"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "显示用户配置"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "在用户个人资料页展示其档案信息"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr "一周从……开始"
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr "星期几的起始日,用于在日历视图中显示"
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr "星期天"
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr "星期一"
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr "星期二"
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr "星期三"
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr "星期四"
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr "星期五"
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr "星期六"
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "启用测试站数据"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "启用测试站数据收集以获取测试结果"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "启用设备状态检测"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
msgstr "启用定期 Ping 检测,确认注册设备的运行状态"
@@ -3930,55 +4048,80 @@ msgstr "禁用时:完整分类路径以悬停提示框形式显示。\n"
"启用时:完整分类路径以纯文本形式显示。"
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr "在物料清单表中显示子装配"
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr "启用物料清单表中的子装配显示"
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "接收错误报告"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "接收系统错误通知"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "上次使用的打印设备"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "为用户保存上次使用的打印设备"
-#: common/validators.py:38
+#: 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:39
msgid "All models"
msgstr "全部型号"
-#: common/validators.py:63
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "未提供附件型号"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "附件模型类型无效"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "最小位置不能大于最大位置"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "最大名额不能小于最小名额"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "不允许空域。"
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "无效的域名: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "值必须大写"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "值必须是一个有效的变量标识符"
@@ -4006,13 +4149,13 @@ 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:510
msgid "Manufacturer"
msgstr "制造商"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "公司"
@@ -4052,8 +4195,8 @@ msgstr "联系电话"
msgid "Contact email address"
msgstr "联系人电子邮箱地址"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "联系人"
@@ -4105,7 +4248,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:574 order/models.py:2410
msgid "Address"
msgstr "地址"
@@ -4197,12 +4340,12 @@ msgstr "内部使用的装运通知单"
msgid "Link to address information (external)"
msgstr "链接地址信息 (外部)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "基础零件"
@@ -4215,12 +4358,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "制造商零件编号"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "制造商零件编号"
@@ -4244,11 +4387,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "供应商"
@@ -4256,7 +4399,7 @@ msgstr "供应商"
msgid "Select supplier"
msgstr "选择供应商"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "供应商库存管理单位"
@@ -4284,16 +4427,16 @@ msgstr "外部供应商零件链接的URL"
msgid "Supplier part description"
msgstr "供应商零件说明"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "基本费用"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "最低费用(例如库存费)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "打包"
@@ -4309,7 +4452,7 @@ msgstr "包装数量"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "单包供应的总数量。为单个项目留空。"
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "多个"
@@ -4333,25 +4476,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:881 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"
@@ -4505,7 +4648,7 @@ msgstr "原始行数据"
msgid "Errors"
msgstr "错误"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "有效"
@@ -4617,7 +4760,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:2367
msgid "Unknown"
msgstr "未知"
@@ -4721,7 +4864,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 "组"
@@ -4745,117 +4888,118 @@ msgstr "最大进度"
msgid "Maximum value for progress type, required if type=progress"
msgstr "进度类型的最大值。当 type=progress 时为必填项"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "订单参考"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "未完成"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "有项目编码"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "创建人"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "创建时间早于"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "创建时间晚于"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "有开始日期"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "开始日期早于"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "开始日期晚于"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "有目标日期"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "目标日期早于"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "目标日期晚于"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "更新时间早于"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "更新时间晚于"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "有定价"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "完成时间早于"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "完成时间晚于"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "订单"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "订单完成"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "内部零件"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "订单待定"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "已完成"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "有配送"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
msgstr "未找到发货记录"
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4863,774 +5007,848 @@ msgstr "采购订单"
msgid "Sales Order"
msgstr "销售订单"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "退货订单"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "总价格"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "此订单的总价"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "订单货币"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "此订单的货币 (留空以使用公司默认值)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "该订单已锁定,不可修改"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "联系人与所选公司不匹配"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "开始日期必须早于目标日期"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "地址与所选公司不匹配"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "订单描述 (可选)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "为此订单选择项目编码"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "链接到外部页面"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "开始日期"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "本订单的预定开始日期"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "预计日期"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "订单交付的预期日期。订单将在此日期后过期。"
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "签发日期"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "订单发出日期"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "更新时间"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "负责此订单的用户或组"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "此订单的联系人"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "此订单的公司地址"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "狀態"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "采购订单状态"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "订购物品的公司"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "供应商参考"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "供应商订单参考代码"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "接收人"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "订单完成日期"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "目的地"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "接收物品的目标"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "零件供应商必须与采购订单供应商匹配"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "行项目与采购订单不匹配"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "行项目缺少关联零件"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "数量必须是正数"
-#: order/models.py:1072
+#: order/models.py:1111
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:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "客户"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "出售物品的公司"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "销售订单状态"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "客户参考 "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "客户订单参考代码"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "发货日期"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "发货人"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "订单已完成"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "订单已取消"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "只有未结订单才能标记为已完成"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "由于发货不完整,订单无法完成"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "由于缺货,订单无法完成"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "订单无法完成,因为行项目不完整"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "订单已锁定,不可修改"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "项目数量"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
msgstr "行号"
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
msgstr "此项目的行号(可选)"
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "行项目参考"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "行项目注释"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "行项目描述 (可选)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "此行的附加上下文"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "单位价格"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "采购订单行项目"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "供应商零件必须与供应商匹配"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "生产订单必须标记为外部"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "生产订单仅可关联至装配零件"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "生产订单零件必须与行项目零件一致"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr "装配零件需要外部生产订单"
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "供应商零件"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "已接收"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "收到的物品数量"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "采购价格"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "每单位的采购价格"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "外部生产订单需由此行项目履行"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "采购订单附加行"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "销售订单行项目"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "只有可销售的零件才能分配给销售订单"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "售出价格"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "单位售出价格"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "已配送"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "发货数量"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "销售订单发货"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "收货地址必须与该客户的资料一致"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "本次发货的收货地址"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "发货日期"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "送达日期"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "装运交货日期"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "审核人"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "配送"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "配送单号"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "跟踪单号"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "配送跟踪信息"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "发票编号"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "相关发票的参考号"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "货物已发出"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "发货没有分配库存项目"
-#: order/models.py:2446
+#: order/models.py:2516
msgid "Shipment must be checked before it can be completed"
msgstr "货件必须先经核对,方可标记为完成"
-#: order/models.py:2516
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "销售订单加行"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "销售订单分配"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "库存项目尚未分配"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "无法将库存项目分配给具有不同零件的行"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "无法将库存分配给没有零件的生产线"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "分配数量不能超过库存数量"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "分配的数量必须大于零"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "序列化库存项目的数量必须为1"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "销售订单与发货不匹配"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "发货与销售订单不匹配"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "行"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "销售订单发货参考"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "项目"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "选择要分配的库存项目"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "输入库存分配数量"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "退货订单参考"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "退回物品的公司"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "退货订单状态"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "退货订单行项目"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "必须指定库存项"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "退回数量超过库存数量"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "退回数量必须大于零"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "序列化库存项的数量无效"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "选择要从客户处退回的商品"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "接收日期"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
msgstr "收到此退货的日期"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "结果"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "该行项目的结果"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "与此行项目的退货或维修相关的成本"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "退货订单附加行"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "订单ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "要复制的订单ID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "复制行"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "从原始订单复制行项目"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "复制额外行"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "从原始订单复制额外的行项目"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "复制参数"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
msgstr "从原始订单复制订单参数"
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "行项目"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "已完成行项目"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "复制订单"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "指定复制此订单的选项"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "订单ID不正确"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "供应商名称"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "订单不能取消"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "允许关闭行项目不完整的订单"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "订单中的行项目不完整"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "订单未打开"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "自动定价"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "根据供应商零件数据自动计算采购价格"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "购买价格货币"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "合并项目"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "库存量单位"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "内部零件编号"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "内部零件名称"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "必须指定供应商零件"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "必须指定采购订单"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "供应商必须匹配采购订单"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "采购订单必须与供应商匹配"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "行项目"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "为收到的物品选择目的地位置"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "输入入库项目的批号"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "有效期至"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "输入入库库存项的有效期"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "输入入库库存项目的序列号"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "覆盖传入库存项目的包装资料"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "传入库存项目的附加说明"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "条形码"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "扫描条形码"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "条形码已被使用"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "必须提供行项目"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "必须指定目标位置"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "提供的条形码值必须是唯一的"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "配送"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "完成配送"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
msgstr "已分配的行"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "售出价格货币"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "已分配的项目"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "未提供装运详细信息"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "行项目与此订单不关联"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "数量必须为正"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr "该库存项未通过所有必要的测试"
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "输入要分配的序列号"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "货物已发出"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "发货与此订单无关"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "未找到以下序列号的匹配项"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "以下序列号不可用"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "退货订单行项目"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "行项目与退货订单不匹配"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "行项目已收到"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "只能根据正在进行的订单接收物品"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "退货数量"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "行价格货币"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "丢失"
@@ -5663,6 +5881,11 @@ msgstr "退款"
msgid "Reject"
msgstr "拒绝"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "已派发"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "逾期采购订单"
@@ -5698,7 +5921,7 @@ msgstr "已加星标"
msgid "Filter by starred categories"
msgstr "按星标类别筛选"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "深度"
@@ -5706,7 +5929,7 @@ msgstr "深度"
msgid "Filter by category depth"
msgstr "按类别深度筛选"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "顶级"
@@ -5714,7 +5937,7 @@ msgstr "顶级"
msgid "Filter by top-level categories"
msgstr "按顶级类别筛选"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "级联"
@@ -5734,75 +5957,79 @@ msgstr "按父类别筛选"
msgid "Exclude sub-categories under the specified category"
msgstr "排除指定类别下的子类别"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "有结果"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "是变体"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "是修订版本"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "有修订版本"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "物料清单合规"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
msgstr "级联分类"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
msgstr "如果为真,则包含给定分类下的所有子分类中的项目"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
msgstr "按数字分类ID或字面值 \"null\" 进行筛选"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
msgstr "装配零件已启用"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
msgstr "装配零件可追踪"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "装配部份是可测试的"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr "装配零件已锁定"
+
+#: part/api.py:1319
msgid "Component part is active"
msgstr "元器件已激活"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
msgstr "该零部件可追溯"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "组件部份是可测试的"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
msgstr "该零部件是一个装配件"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
msgstr "该零部件为虚拟件"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
msgstr "有可用库存"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "使用"
@@ -5811,11 +6038,11 @@ msgstr "使用"
msgid "Part Category"
msgstr "零件类别"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "零件类别"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "默认位置"
@@ -5823,7 +6050,7 @@ msgstr "默认位置"
msgid "Default location for parts in this category"
msgstr "此类别零件的默认库存地点"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "结构性"
@@ -5839,12 +6066,12 @@ msgstr "默认关键字"
msgid "Default keywords for parts in this category"
msgstr "此类别零件的默认关键字"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "图标"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "图标(可选)"
@@ -5864,984 +6091,1028 @@ msgstr "默认值"
msgid "Default Parameter Value"
msgstr "默认参数值"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "出售多个"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "用于缓存定价计算的货币"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "最低物料清单成本"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "元件的最低成本"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "物料清单的最高成本"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "元件的最高成本"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "最低购买成本"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "最高历史购买成本"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "最大购买成本"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "最高历史购买成本"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "最低内部价格"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "基于内部批发价的最低成本"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "最大内部价格"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "基于内部批发价的最高成本"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "供应商最低价格"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "外部供应商零件的最低价格"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "供应商最高价格"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "来自外部供应商的商零件的最高价格"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "最小变体成本"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "计算出的变体零件的最低成本"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "最大变体成本"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "计算出的变体零件的最大成本"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "最低成本"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "覆盖最低成本"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "最高成本"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "覆盖最大成本"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "计算总最低成本"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "计算总最大成本"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "最低售出价格"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "基于批发价的最低售出价格"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "最高售出价格"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "基于批发价的最大售出价格"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "最低销售成本"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "历史最低售出价格"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "最高销售成本"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "历史最高售出价格"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "用于盘点的零件"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "物品数量"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "盘点时的个别库存条目数"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "盘点时可用库存总额"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "日期"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "进行盘点的日期"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "最低库存成本"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "现有存库存最低成本估算"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "最高库存成本"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "目前库存最高成本估算"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "零件售出价格折扣"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "零件测试模板"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "模板名称无效 - 必须包含至少一个字母或者数字"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "测试模板只能为可拆分的部件创建"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "零件已存在具有相同主键的测试模板"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "测试名"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "输入测试的名称"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "测试主键"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "简化测试主键"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "测试说明"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "输入测试的描述"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "此测试是否已启用?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "必须的"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "需要此测试才能通过吗?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "需要值"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "添加测试结果时是否需要一个值?"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "需要附件"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "添加测试结果时是否需要文件附件?"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "此测试的有效选择 (逗号分隔)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr "数量无效 - 未指定零件的单位"
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr "数量必须大于或等于零"
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "物料清单项目不能被修改 - 装配已锁定"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "物料清单项目不能修改 - 变体装配已锁定"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "选择父零件"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "子零件"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "选择要用于物料清单的零件"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr "数量"
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr "生产一个部件所消耗的子零件数量"
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "此物料清单项目的数量"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "此物料清单项目是可选的"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "设置数量"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "为补偿生产准备损耗所需的额外数量"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "损耗"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "生产预估损耗率(百分比,0-100)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "舍入倍数"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "将所需生产数量向上舍入至该值的最接近倍数"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "物料清单项目引用"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "物料清单项目注释"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "校验和"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "物料清单行校验和"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "已验证"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "此物料清单项目已验证"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "获取继承的"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "此物料清单项目是由物料清单继承的变体零件"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "变体零件的库存项可以用于此物料清单项目"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "可追踪零件的数量必须是整数"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "必须指定子零件"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "物料清单项目替代品"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "替代品零件不能与主零件相同"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "上级物料清单项目"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "替代品零件"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "零件 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "零件2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "选择相关的零件"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "此关系的注释"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "零件关系不能在零件和自身之间创建"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "复制关系已经存在"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "上级类别"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "上级零件类别"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "子类别"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "结果"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "根据该模板记录的结果数量"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "购买此库存项的货币"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "文件不是一个图片"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "原始零件"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "选择要复制的原始零件"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "复制图片"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "从原零件复制图片"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "复制物料清单"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "从原始零件复制材料清单"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "从原始零件复制参数数据"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "复制备注"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "从原始零件复制备注"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "复制测试"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "从原始零件复制测试模板"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "初始化库存数量"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。"
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "初始化库存地点"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "初始化指定此零件的库存地点"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "选择供应商(或为空以跳过)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "选择制造商(或为空)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "制造商零件号"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "所选公司不是一个有效的供应商"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "所选公司不是一个有效的制造商"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "匹配此库存单位 (SKU) 的供应商零件已存在"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "类别名称"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "正在生产"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "目前正在生产的零件数量"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "此零件计划待产数量"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "库存项"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "修订"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "未分配的库存"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "变体库存"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "重复零件"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "从另一个零件复制初始数据"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "初始库存"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "创建具有初始库存数量的零件"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "供应商信息"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "添加此零件的初始供应商信息"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "复制类别参数"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "从选择的零件复制参数模版"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "现有的图片"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "现有零件图片的文件名"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "图片不存在"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "验证整个物料清单"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "可以创建"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "生产订单必填项"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "分配到生产订单"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "销售订单必填项"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "分配到销售订单"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
msgstr "内部零件号"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
msgstr "零件描述"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息"
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料"
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料"
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
msgstr "生成盘点条目"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
msgstr "保存所选物料的盘点条目"
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "生成报告"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr "为所选物料生成盘点报告"
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "最低价格"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "覆盖已计算的最低价格值"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "最低价格货币"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "最高价格"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "覆盖已计算的最高价格值"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "最高价格货币"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "更新"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "更新这个零件的价格"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "无法将所提供的货币转换为 {default_currency}"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "最低价格不能高于最高价格。"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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 "数量必须大于或等于零"
+msgid "Amount required for this item (can include units)"
+msgstr "此商品所需数量(可包含单位)"
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "选择父装配"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "选择零部件"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr "无效的数量格式"
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "选择要复制物料清单的零件"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "移除现有数据"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "复制前删除现有的物料清单项目"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "包含继承的"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "包含从模板零件继承的物料清单项目"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "跳过无效行"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "启用此选项以跳过无效行"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "复制替代品零件"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "复制物料清单项目时复制替代品零件"
@@ -7093,15 +7364,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 "没有要打印的项目"
@@ -7162,7 +7433,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
@@ -7508,20 +7779,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"
@@ -7562,7 +7833,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 "横屏模式"
@@ -7764,7 +8035,7 @@ msgstr "软件包插件"
msgid "Plugin"
msgstr "插件"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "未找到作者"
@@ -8023,7 +8294,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 "没有有效的项目提供到模板"
@@ -8067,118 +8338,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"
@@ -8227,13 +8498,10 @@ msgstr "所需材料"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "零件图像"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "已派发"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "需要给"
@@ -8269,7 +8537,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "序列号"
@@ -8294,7 +8562,7 @@ msgstr "库存项测试报告"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "已安装的项目"
@@ -8327,6 +8595,10 @@ msgstr "无结果 (必填)"
msgid "No result"
msgstr "没有结果"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
msgstr "无效的媒体文件路径"
@@ -8355,491 +8627,499 @@ msgstr "parpart_image 标签需要一个零件实例"
msgid "company_image tag requires a Company instance"
msgstr "公司_图片标签需要一个公司实例"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "按位置深度筛选"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "按顶级位置筛选"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "在筛选结果中包含子地点"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "上级地点"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "按上级位置筛选"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "零件名称 (不区分大小写)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "零件名称包含 (不区分大小写)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "零件名称 (正则表达式)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "内部零件号 (不区分大小写)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "内部零件号 (不区分大小写)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "内部零件号 (正则表达式)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "最低库存"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "最大库存"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "状态代码"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "外部地点"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "被生产订单消耗"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "安装于其他库存项中"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "零件树"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "更新时间早于"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "更新时间晚于"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "盘点时间早于"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "盘点时间晚于"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "过期日期前"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "过期日期后"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "过期"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
msgstr "提供库存项的主键(PK)以排除该项及其所有子项"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
msgstr "级联位置"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
msgstr "若为真,则包含给定位置的所有子位置中的项目"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
msgstr "按数字位置ID或字母“null”筛选"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "请先输入数量"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "必须提供有效的零件"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "给定的供应商零件不存在"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "不能为不可跟踪的零件提供序列号"
-#: stock/api.py:1409
+#: stock/api.py:1418
msgid "Include Installed"
msgstr "包含已安装项"
-#: stock/api.py:1411
+#: stock/api.py:1420
msgid "If true, include test results for items installed underneath the given stock item"
msgstr "如果为真,则包含给定库存项下已安装组件的测试结果"
-#: stock/api.py:1418
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "按数字库存项ID进行筛选"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "ID 为 {id} 的库存项不存在"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "包含零件变体"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "日期晚于"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "日期早于"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "库存地点类型"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "库存地点类型"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "为所有没有图标的位置设置默认图标(可选)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "库存地点"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "库存地点"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "所有者"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "选择所有者"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "外部"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "这是一个外部库存地点"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "位置类型"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "该位置的库存地点类型"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr "序列化库存商品无法删除"
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} 不存在"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "必须指定零件"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "库存项不能存放在结构性库存地点!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "无法为虚拟零件创建库存项"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "有序列号的项目的数量必须是1"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "如果数量大于1,则不能设置序列号"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "项目不能属于其自身"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "如果is_building=True,则项必须具有构建引用"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "构建引用未指向同一零件对象"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "父级库存项"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "基础零件"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "为此库存项目选择匹配的供应商零件"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "这个库存物品在哪里?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "包装此库存物品存储在"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "安装于"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "此项目是否安装在另一个项目中?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "此项目的序列号"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "此库存项的批号"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "库存数量"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "源代码构建"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "为此库存项目构建"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "消费者"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "构建消耗此库存项的生产订单"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "采购订单来源"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "此库存商品的采购订单"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "目的地销售订单"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "库存物品的到期日。在此日期之后,库存将被视为过期"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "耗尽时删除"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "当库存耗尽时删除此库存项"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "购买时一个单位的价格"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "转换为零件"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "数量超过可用库存"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "零件未设置为可跟踪"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "数量必须是整数"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "数量不得超过现有库存量 ({self.quantity})"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "必须以列表形式提供序列号"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "数量不匹配序列号"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr "无法将库存分配到结构位置"
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "测试模板不存在"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "库存项已分配到销售订单"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "库存项已安装在另一个项目中"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "库存项包含其他项目"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "库存项已分配给客户"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "库存项目前正在生产"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "序列化的库存不能合并"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "复制库存项"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "库存项必须指相同零件"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "库存项必须是同一供应商的零件"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "库存状态码必须匹配"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "库存项不能移动,因为它没有库存"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "库存项跟踪"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "条目注释"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "库存项测试结果"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "必须为此测试提供值"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "测试附件必须上传"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "此测试的值无效"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "测试结果"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "测试输出值"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "测验结果附件"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "测试备注"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "测试站"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "进行测试的测试站的标识符"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "已开始"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "测试开始的时间戳"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "已完成"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "测试结束的时间戳"
@@ -8915,214 +9195,234 @@ msgstr "添加时使用包装尺寸:定义的数量是包装的数量"
msgid "Use pack size"
msgstr "包装规格"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "输入新项目的序列号"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "供应商零件编号"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "已过期"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "子项目"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "跟踪项目"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "此库存商品的购买价格,单位或包装"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "输入要序列化的库存项目数量"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "未提供库存项"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "数量不得超过现有库存量 ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "目标库存位置"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "此零件不能分配序列号"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "序列号已存在"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "选择要安装的库存项目"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "安装数量"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "输入要安装的项目数量"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "添加交易记录 (可选)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "安装数量必须至少为1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "库存项不可用"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "所选零件不在物料清单中"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "安装数量不得超过可用数量"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "已卸载项目的目标位置"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "选择要将库存项目转换为的零件"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "所选零件不是有效的转换选项"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "无法转换已分配供应商零件的库存项"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "库存项状态代码"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "选择要更改状态的库存项目"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "未选择库存商品"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "子位置"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "上级库存地点"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "零件必须可销售"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "物料已分配到销售订单"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "项目被分配到生产订单中"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "客户分配库存项目"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "所选公司不是客户"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "库存分配说明"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "必须提供库存物品清单"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "库存合并说明"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "允许不匹配的供应商"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "允许合并具有不同供应商零件的库存项目"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "允许不匹配的状态"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "允许合并具有不同状态代码的库存项目"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "必须提供至少两件库存物品"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "无更改"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "库存项主键值"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "库存项无现货"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "库存项已有现货"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "数量不得为负"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "库存交易记录"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "合并至现有库存"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "若可行,将退回项目合并至现有库存项"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "下一个序列号"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "上一个序列号"
@@ -9460,150 +9760,158 @@ 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 "用户主组"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "管理员"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr "物料清单"
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "采购订单"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "销售订单"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "退货订单"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "用户名"
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 8086aac27f..3b45fbbbdd 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-21 02:25+0000\n"
-"PO-Revision-Date: 2026-04-21 02:27\n"
+"POT-Creation-Date: 2026-05-23 23:28+0000\n"
+"PO-Revision-Date: 2026-05-23 23:30\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
@@ -23,7 +23,7 @@ msgstr "未找到 API 端點"
#: InvenTree/api.py:438
msgid "List of items must be provided for bulk operation"
-msgstr ""
+msgstr "必須提供項目清單以進行大量操作"
#: InvenTree/api.py:445
msgid "Items must be provided as a list"
@@ -88,7 +88,8 @@ msgid "Could not convert {original} to {unit}"
msgstr "不能將 {original} 轉換到 {unit}"
#: InvenTree/conversion.py:286 InvenTree/conversion.py:300
-#: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042
+#: InvenTree/helpers.py:610 order/models.py:786 order/models.py:1081
+#: part/models.py:3995
msgid "Invalid quantity provided"
msgstr "提供的數量無效"
@@ -104,13 +105,13 @@ msgstr "輸入日期"
msgid "Invalid decimal value"
msgstr "無效的十進位數值"
-#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:504
-#: build/serializers.py:575 build/serializers.py:1788 company/models.py:827
-#: order/models.py:1828
+#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:493
+#: build/serializers.py:543 build/serializers.py:1720 company/models.py:827
+#: order/models.py:1884
#: report/templates/report/inventree_build_order_report.html:172
-#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746
-#: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411
-#: stock/serializers.py:1500 stock/serializers.py:1699
+#: stock/models.py:3027 stock/models.py:3151 stock/serializers.py:748
+#: stock/serializers.py:924 stock/serializers.py:1066 stock/serializers.py:1438
+#: stock/serializers.py:1527 stock/serializers.py:1726
msgid "Notes"
msgstr "備註"
@@ -165,49 +166,49 @@ msgstr "資料包含被禁止的 Markdown 內容"
#: InvenTree/helpers_model.py:109
msgid "Invalid URL: no hostname"
-msgstr ""
+msgstr "無效的 URL:沒有主機名稱"
#: InvenTree/helpers_model.py:114
msgid "Invalid URL: hostname could not be resolved"
-msgstr ""
+msgstr "無效的 URL:無法解析主機名稱"
#: InvenTree/helpers_model.py:120
msgid "URL points to a private or reserved IP address"
-msgstr ""
+msgstr "URL 指向私有或保留的 IP 地址"
-#: InvenTree/helpers_model.py:195
+#: InvenTree/helpers_model.py:197
msgid "Too many redirects"
-msgstr ""
+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:1444 common/models.py:1871
+#: common/models.py:2302 common/models.py:2427 common/models.py:2724
#: common/serializers.py:647 generic/states/serializers.py:20
-#: machine/models.py:25 part/models.py:1101 plugin/models.py:54
-#: report/models.py:219 stock/models.py:86
+#: machine/models.py:25 part/models.py:1102 plugin/models.py:54
+#: report/models.py:219 stock/models.py:87
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
-#: 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
+#: InvenTree/models.py:1030 build/models.py:264 common/models.py:181
+#: common/models.py:2434 common/models.py:2575 common/models.py:2739
+#: company/models.py:558 company/models.py:818 order/models.py:486
+#: order/models.py:1929 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
+#: stock/models.py:93
msgid "Description"
msgstr "描述"
-#: InvenTree/models.py:1029 stock/models.py:93
+#: InvenTree/models.py:1031 stock/models.py:94
msgid "Description (optional)"
msgstr "描述(選填)"
-#: InvenTree/models.py:1044 common/models.py:2869
+#: InvenTree/models.py:1046 common/models.py:3045
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:1782
#: 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:4168
+#: InvenTree/serializers.py:363
msgid "Must be a valid number"
msgstr "必須是有效的數字"
-#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3307
+#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3371
msgid "Currency"
msgstr "貨幣"
-#: InvenTree/serializers.py:406 part/serializers.py:1387
+#: InvenTree/serializers.py:408 part/serializers.py:1403
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,30 +537,32 @@ 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:118 order/api.py:285 order/api.py:1388
+#: order/serializers.py:125
msgid "Order Status"
msgstr "訂單狀態"
-#: build/api.py:81 build/models.py:277
+#: build/api.py:81 build/models.py:276
msgid "Parent Build"
msgstr "上層生產工單"
-#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783
-#: order/api.py:1185 order/api.py:1486 stock/api.py:572
+#: build/api.py:85 build/api.py:1003 order/api.py:562 order/api.py:787
+#: order/api.py:1189 order/api.py:1490 order/api.py:1781 order/api.py:1971
+#: stock/api.py:577
msgid "Include Variants"
msgstr "包含變體"
-#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283
-#: build/serializers.py:1213 build/serializers.py:1389
-#: build/serializers.py:1482 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:1132 part/api.py:1135 part/api.py:1348
-#: part/models.py:527 part/models.py:3318 part/models.py:3461
-#: part/models.py:3519 part/models.py:3540 part/models.py:3562
-#: part/models.py:3703 part/models.py:3965 part/models.py:4384
-#: part/serializers.py:1336 part/serializers.py:1990
+#: build/api.py:101 build/api.py:475 build/api.py:1017 build/models.py:282
+#: build/serializers.py:1145 build/serializers.py:1321
+#: build/serializers.py:1414 company/models.py:1037 company/serializers.py:420
+#: order/api.py:313 order/api.py:317 order/api.py:944 order/api.py:1202
+#: order/api.py:1205 order/api.py:1984 order/api.py:1987 order/api.py:2141
+#: order/models.py:2061 order/models.py:2229 order/models.py:2230
+#: order/models.py:3609 order/models.py:3610 part/api.py:1154 part/api.py:1157
+#: part/api.py:1374 part/models.py:528 part/models.py:3382 part/models.py:3525
+#: part/models.py:3583 part/models.py:3604 part/models.py:3626
+#: part/models.py:3767 part/models.py:4089 part/models.py:4516
+#: part/serializers.py:1352 part/serializers.py:2016
#: 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
@@ -584,9 +571,10 @@ msgstr "包含變體"
#: report/templates/report/inventree_sales_order_report.html:27
#: report/templates/report/inventree_sales_order_shipment_report.html:28
#: report/templates/report/inventree_stock_location_report.html:102
-#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120
-#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:607
-#: stock/serializers.py:955 templates/email/build_order_completed.html:17
+#: report/templates/report/inventree_transfer_order_report.html:25
+#: stock/api.py:590 stock/api.py:1538 stock/serializers.py:120
+#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:609
+#: stock/serializers.py:957 templates/email/build_order_completed.html:17
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:15
#: templates/email/overdue_build_order.html:16
@@ -595,9 +583,9 @@ msgstr "包含變體"
msgid "Part"
msgstr "零件"
-#: build/api.py:121 build/api.py:124 build/serializers.py:1496 part/api.py:967
-#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590
-#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868
+#: build/api.py:121 build/api.py:124 build/serializers.py:1428 part/api.py:988
+#: part/api.py:1385 part/models.py:412 part/models.py:1143 part/models.py:3654
+#: part/serializers.py:1362 part/serializers.py:1787 stock/api.py:877
msgid "Category"
msgstr "類別"
@@ -605,7 +593,7 @@ msgstr "類別"
msgid "Ancestor Build"
msgstr "可測試部分"
-#: build/api.py:153 order/api.py:132
+#: build/api.py:153 order/api.py:136
msgid "Assigned to me"
msgstr "分配給我"
@@ -653,374 +641,365 @@ msgstr "完成於之前"
msgid "Completed after"
msgstr "完成於之後"
-#: build/api.py:250 order/api.py:237
+#: build/api.py:250 order/api.py:241
msgid "Min Date"
msgstr "最小日期"
-#: build/api.py:273 order/api.py:256
+#: build/api.py:273 order/api.py:260
msgid "Max Date"
msgstr "最大日期"
-#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960
+#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:969
msgid "Exclude Tree"
msgstr "排除樹"
-#: build/api.py:400
+#: build/api.py:414
msgid "Build must be cancelled before it can be deleted"
msgstr "工單必須被取消才能被刪除"
-#: build/api.py:444 build/serializers.py:1423 part/models.py:3999
+#: build/api.py:458 build/serializers.py:1355 part/models.py:4131
msgid "Consumable"
msgstr "耗材"
-#: build/api.py:447 build/serializers.py:1426 part/models.py:3993
+#: build/api.py:461 build/serializers.py:1358 part/models.py:4125
msgid "Optional"
msgstr "非必須項目"
-#: build/api.py:450 build/serializers.py:1468 common/setting/system.py:483
-#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754
-#: stock/api.py:638
+#: build/api.py:464 build/serializers.py:1400 common/setting/system.py:476
+#: part/models.py:1257 part/serializers.py:1732 part/serializers.py:1758
+#: stock/api.py:643
msgid "Assembly"
msgstr "裝配"
-#: build/api.py:453
+#: build/api.py:467
msgid "Tracked"
msgstr "追蹤中"
-#: build/api.py:456 build/serializers.py:1429 part/models.py:1265
+#: build/api.py:470 build/serializers.py:1361 part/models.py:1275
msgid "Testable"
msgstr "可測試"
-#: build/api.py:466 order/api.py:1004 order/api.py:1374
+#: build/api.py:480 order/api.py:1008 order/api.py:1378 order/api.py:2205
msgid "Order Outstanding"
msgstr "訂單未完成"
-#: build/api.py:476 build/serializers.py:1525 order/api.py:963
+#: build/api.py:490 build/serializers.py:1457 order/api.py:967
+#: order/api.py:2164
msgid "Allocated"
msgstr "已分配"
-#: build/api.py:485 build/models.py:1786 build/serializers.py:1442
+#: build/api.py:499 build/models.py:1725 build/serializers.py:1374
msgid "Consumed"
msgstr "已消耗"
-#: build/api.py:494 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:518 build/serializers.py:1527 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:1459 company/serializers.py:394
+#: order/serializers.py:1345 order/serializers.py:2587 part/serializers.py:885
+#: part/serializers.py:1213 part/serializers.py:1796
msgid "On Order"
msgstr "已訂購"
-#: build/api.py:671
+#: build/api.py:685
msgid "Build not found"
-msgstr ""
+msgstr "找不到生產記錄"
-#: build/api.py:941 build/models.py:120 order/models.py:2024
+#: build/api.py:1040 build/models.py:119 order/models.py:2094
#: report/templates/report/inventree_build_order_report.html:105
#: stock/serializers.py:93 templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
msgid "Build Order"
msgstr "生產工單"
-#: build/api.py:955 build/api.py:959 build/serializers.py:367
-#: build/serializers.py:492 build/serializers.py:562 build/serializers.py:1263
-#: build/serializers.py:1269 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
-#: 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
+#: build/api.py:1054 build/api.py:1058 build/serializers.py:368
+#: build/serializers.py:481 build/serializers.py:530 build/serializers.py:1195
+#: build/serializers.py:1201 order/api.py:1249 order/api.py:1254
+#: order/api.py:2023 order/api.py:2028 order/serializers.py:847
+#: order/serializers.py:987 order/serializers.py:2160 part/serializers.py:1372
+#: stock/api.py:995 stock/serializers.py:111 stock/serializers.py:621
+#: stock/serializers.py:741 stock/serializers.py:919 stock/serializers.py:1520
+#: stock/serializers.py:1841 stock/serializers.py:1890
+#: templates/email/stale_stock_notification.html:18 users/models.py:547
msgid "Location"
msgstr "地點"
-#: build/api.py:967 part/serializers.py:1381
+#: build/api.py:1066 part/serializers.py:1397
msgid "Output"
msgstr "產出"
-#: build/api.py:969
+#: build/api.py:1068
msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items."
-msgstr ""
+msgstr "依產出庫存項目 ID 篩選。使用 'null' 尋找未安裝的生產項目。"
-#: build/models.py:121 users/ruleset.py:31
+#: build/models.py:120 users/ruleset.py:34
msgid "Build Orders"
msgstr "生產工單"
-#: build/models.py:181
+#: build/models.py:180
msgid "Assembly BOM has not been validated"
msgstr "裝配物料清單尚未驗證"
-#: build/models.py:188
+#: build/models.py:187
msgid "Build order cannot be created for an inactive part"
msgstr "無法為未激活的零件創建生產訂單"
-#: build/models.py:195
+#: build/models.py:194
msgid "Build order cannot be created for an unlocked part"
msgstr "無法為已解鎖的零件創建生產訂單"
-#: build/models.py:213
+#: build/models.py:212
msgid "Build orders can only be externally fulfilled for purchaseable parts"
msgstr "只有可採購的零件,生產工單才可進行外部履行"
-#: build/models.py:220 order/models.py:373
+#: build/models.py:219 order/models.py:401
msgid "Responsible user or group must be specified"
msgstr "必須指定負責的用户或組"
-#: build/models.py:225
+#: build/models.py:224
msgid "Build order part cannot be changed"
msgstr "無法更改生產工單"
-#: build/models.py:230 order/models.py:386
+#: build/models.py:229 order/models.py:419
msgid "Target date must be after start date"
msgstr "目標日期必須晚於開始日期"
-#: build/models.py:258
+#: build/models.py:257
msgid "Build Order Reference"
msgstr "生產工單代號"
-#: build/models.py:259 build/serializers.py:1420 order/models.py:641
-#: order/models.py:1350 order/models.py:1821 order/models.py:2764
-#: part/models.py:4039
+#: build/models.py:258 build/serializers.py:1352 order/models.py:680
+#: order/models.py:1393 order/models.py:1877 order/models.py:2834
+#: order/models.py:3283 part/models.py:4171
#: 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
#: report/templates/report/inventree_sales_order_report.html:28
+#: report/templates/report/inventree_transfer_order_report.html:26
msgid "Reference"
msgstr "參考代號"
-#: build/models.py:268
+#: build/models.py:267
msgid "Brief description of the build (optional)"
msgstr "關於生產工單的簡單説明(選填)"
-#: build/models.py:278
+#: build/models.py:277
msgid "Build Order to which this build is allocated"
-msgstr ""
+msgstr "分配此生產的生產訂單"
-#: build/models.py:287
+#: build/models.py:286
msgid "Select part to build"
msgstr "選擇要生產的零件"
-#: build/models.py:292
+#: build/models.py:291
msgid "Sales Order Reference"
msgstr "銷售訂單代號"
-#: build/models.py:297
+#: build/models.py:296
msgid "Sales Order to which this build is allocated"
-msgstr ""
+msgstr "分配此生產的銷售訂單"
-#: build/models.py:302 build/serializers.py:1092
+#: build/models.py:301 build/serializers.py:1024 order/models.py:3303
msgid "Source Location"
msgstr "來源倉儲地點"
-#: build/models.py:308
+#: build/models.py:307
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)"
-#: build/models.py:314
+#: build/models.py:313
msgid "External Build"
msgstr "外部生產"
-#: build/models.py:315
+#: build/models.py:314
msgid "This build order is fulfilled externally"
msgstr "此生產工單由外部履行"
-#: build/models.py:320
+#: build/models.py:319 order/models.py:3313
msgid "Destination Location"
msgstr "目標倉儲地點"
-#: build/models.py:325
+#: build/models.py:324
msgid "Select location where the completed items will be stored"
msgstr "選擇已完成項目庫存地點"
-#: build/models.py:329
+#: build/models.py:328
msgid "Build Quantity"
msgstr "生產數量"
-#: build/models.py:332
+#: build/models.py:331
msgid "Number of stock items to build"
msgstr "要生產的項目數量"
-#: build/models.py:336
+#: build/models.py:335
msgid "Completed items"
msgstr "已完成項目"
-#: build/models.py:338
+#: build/models.py:337
msgid "Number of stock items which have been completed"
msgstr "已經完成的庫存品數量"
-#: build/models.py:342
+#: build/models.py:341
msgid "Build Status"
msgstr "生產狀態"
-#: build/models.py:347
+#: build/models.py:346
msgid "Build status code"
msgstr "生產狀態代碼"
-#: build/models.py:356 build/serializers.py:354 order/serializers.py:861
-#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666
+#: build/models.py:355 build/serializers.py:355 order/serializers.py:863
+#: stock/models.py:1132 stock/serializers.py:85 stock/serializers.py:1693
msgid "Batch Code"
msgstr "批號"
-#: build/models.py:360 build/serializers.py:355
+#: build/models.py:359 build/serializers.py:356
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:363 order/models.py:523 order/serializers.py:180
+#: part/models.py:1338
msgid "Creation Date"
msgstr "建立日期"
-#: build/models.py:370
+#: build/models.py:369
msgid "Build start date"
msgstr "生產開始日期"
-#: build/models.py:371
+#: build/models.py:370
msgid "Scheduled start date for this build order"
msgstr "預計此生產工單的開始日期"
-#: build/models.py:377
+#: build/models.py:376
msgid "Target completion date"
msgstr "目標完成日期"
-#: build/models.py:379
+#: build/models.py:378
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:383 order/models.py:733 order/models.py:2873
+#: order/models.py:3332
msgid "Completion Date"
msgstr "完成日期"
-#: build/models.py:392
+#: build/models.py:391
msgid "completed by"
msgstr "完成者"
-#: build/models.py:401
+#: build/models.py:400
msgid "Issued by"
msgstr "發布者"
-#: build/models.py:402
+#: build/models.py:401
msgid "User who issued this build order"
msgstr "發布此生產工單的使用者"
-#: build/models.py:411 common/models.py:187 order/api.py:182
-#: order/models.py:516 part/models.py:1345
+#: build/models.py:418 common/models.py:190 order/api.py:186
+#: order/models.py:555 part/models.py:1355
#: report/templates/report/inventree_build_order_report.html:158
msgid "Responsible"
msgstr "負責人"
-#: build/models.py:412
+#: build/models.py:419
msgid "User or group responsible for this build order"
msgstr "負責此生產工單的使用者或羣組"
-#: build/models.py:417 stock/models.py:1100
+#: build/models.py:424 stock/models.py:1125
msgid "External Link"
msgstr "外部連結"
-#: build/models.py:419 common/models.py:2014 part/models.py:1176
-#: stock/models.py:1102
+#: build/models.py:426 common/models.py:2121 part/models.py:1177
+#: stock/models.py:1127
msgid "Link to external URL"
msgstr "外部URL連結"
-#: build/models.py:424
+#: build/models.py:431
msgid "Build Priority"
msgstr "製造優先度"
-#: build/models.py:427
+#: build/models.py:434
msgid "Priority of this build order"
msgstr "此生產工單的優先程度"
-#: build/models.py:435 common/models.py:157 common/models.py:171
-#: order/api.py:168 order/models.py:456 order/models.py:1853
+#: build/models.py:442 common/models.py:160 common/models.py:174
+#: order/api.py:172 order/models.py:495 order/models.py:1909
msgid "Project Code"
msgstr "專案代碼"
-#: build/models.py:436
+#: build/models.py:443
msgid "Project code for this build order"
msgstr "此生產工單隸屬的專案代碼"
-#: build/models.py:689
+#: build/models.py:695
msgid "Cannot complete build order with open child builds"
msgstr "無法完成仍有未結束子工單的生產工單"
-#: build/models.py:694
+#: build/models.py:700
msgid "Cannot complete build order with incomplete outputs"
msgstr "無法完成有未完成產出的生產工單"
-#: build/models.py:713 build/models.py:843
-msgid "Failed to offload task to complete build allocations"
-msgstr "未能卸載任務以完成生產分配"
-
-#: build/models.py:736
-#, python-brace-format
-msgid "Build order {build} has been completed"
-msgstr "生產工單 {build} 已經完成"
-
-#: build/models.py:742
-msgid "A build order has been completed"
-msgstr "一張生產工單已經完成"
-
-#: build/models.py:924 build/serializers.py:402
+#: build/models.py:862 build/serializers.py:403
msgid "Serial numbers must be provided for trackable parts"
msgstr "對於可跟蹤的零件,必須提供序列號"
-#: build/models.py:1016 build/models.py:1103
+#: build/models.py:954 build/models.py:1042
msgid "No build output specified"
msgstr "未指定產出"
-#: build/models.py:1019
+#: build/models.py:957
msgid "Build output is already completed"
msgstr "產出已完成"
-#: build/models.py:1022
+#: build/models.py:960
msgid "Build output does not match Build Order"
msgstr "產出與生產訂單不匹配"
-#: build/models.py:1110 build/models.py:1216 build/serializers.py:280
-#: build/serializers.py:330 build/serializers.py:960 build/serializers.py:1739
-#: 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
+#: build/models.py:1049 build/models.py:1155 build/serializers.py:281
+#: build/serializers.py:331 build/serializers.py:892 build/serializers.py:1671
+#: order/models.py:783 order/serializers.py:633 order/serializers.py:858
+#: part/models.py:3979 stock/models.py:972 stock/models.py:1462
+#: stock/models.py:1963 stock/serializers.py:719 stock/serializers.py:1682
msgid "Quantity must be greater than zero"
msgstr "數量必須大於零"
-#: build/models.py:1114 build/models.py:1221 build/serializers.py:285
+#: build/models.py:1053 build/models.py:1160 build/serializers.py:286
msgid "Quantity cannot be greater than the output quantity"
msgstr "數量不能大於輸出數量"
-#: build/models.py:1189 build/serializers.py:601
+#: build/models.py:1128 build/serializers.py:569
msgid "Build output has not passed all required tests"
msgstr "此產出尚未通過所有必要測試"
-#: build/models.py:1192 build/serializers.py:596
+#: build/models.py:1131 build/serializers.py:564
#, python-brace-format
msgid "Build output {serial} has not passed all required tests"
msgstr "產出 {serial} 未通過所有必要測試"
-#: build/models.py:1203
+#: build/models.py:1142
msgid "Allocated stock items are still in production"
-msgstr ""
+msgstr "已分配的庫存項目仍在生產中"
-#: build/models.py:1211
+#: build/models.py:1150
msgid "Cannot partially complete a build output with allocated items"
-msgstr ""
+msgstr "無法部分完成具有已分配項目的生產產出"
-#: build/models.py:1740
+#: build/models.py:1679
msgid "Build Order Line Item"
msgstr "生產訂單行項目"
-#: build/models.py:1765
+#: build/models.py:1704
msgid "Build object"
msgstr "生產對象"
-#: build/models.py:1777 build/models.py:2102 build/serializers.py:266
-#: build/serializers.py:315 build/serializers.py:1441 common/models.py:1368
-#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783
-#: order/serializers.py:2232 part/models.py:3475 part/models.py:3987
+#: build/models.py:1716 build/models.py:2041 build/serializers.py:267
+#: build/serializers.py:316 build/serializers.py:1373 common/models.py:1374
+#: order/models.py:1849 order/models.py:2717 order/models.py:3757
+#: order/serializers.py:1794 order/serializers.py:2253
+#: order/serializers.py:2824 part/models.py:3539 part/models.py:4119
#: 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
@@ -1032,451 +1011,454 @@ msgstr "生產對象"
#: report/templates/report/inventree_stock_report_merge.html:113
#: report/templates/report/inventree_test_report.html:90
#: report/templates/report/inventree_test_report.html:169
-#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:705
+#: report/templates/report/inventree_transfer_order_report.html:27
+#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:707
#: templates/email/build_order_completed.html:18
#: templates/email/stale_stock_notification.html:19
msgid "Quantity"
msgstr "數量"
-#: build/models.py:1778
+#: build/models.py:1717
msgid "Required quantity for build order"
msgstr "生產工單所需數量"
-#: build/models.py:1787
+#: build/models.py:1726
msgid "Quantity of consumed stock"
msgstr "已消耗庫存數量"
-#: build/models.py:1888
+#: build/models.py:1827
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的"
-#: build/models.py:1951
+#: build/models.py:1890
msgid "Selected stock item does not match BOM line"
msgstr "選擇的庫存品項和BOM的項目不符"
-#: build/models.py:1970
+#: build/models.py:1909
msgid "Allocated quantity must be greater than zero"
-msgstr ""
+msgstr "分配數量必須大於零"
-#: build/models.py:1976
+#: build/models.py:1915
msgid "Quantity must be 1 for serialized stock"
msgstr "有序號的品項數量必須為1"
-#: build/models.py:1986
+#: build/models.py:1925
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "分配的數量({q})不能超過可用的庫存數量({a})"
-#: build/models.py:2003 order/models.py:2596
+#: build/models.py:1942 order/models.py:2666 order/models.py:3721
msgid "Stock item is over-allocated"
msgstr "庫存品項超額分配"
-#: build/models.py:2092 build/serializers.py:943 build/serializers.py:1230
-#: order/serializers.py:1620 order/serializers.py:1641
+#: build/models.py:2031 build/serializers.py:875 build/serializers.py:1162
+#: order/serializers.py:1622 order/serializers.py:1643
+#: order/serializers.py:2610 order/serializers.py:2631
#: 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
+#: stock/api.py:1426 stock/models.py:446 stock/serializers.py:102
+#: stock/serializers.py:831 stock/serializers.py:1372 stock/serializers.py:1488
msgid "Stock Item"
msgstr "庫存品項"
-#: build/models.py:2093
+#: build/models.py:2032
msgid "Source stock item"
msgstr "來源庫存項目"
-#: build/models.py:2103
+#: build/models.py:2042
msgid "Stock quantity to allocate to build"
msgstr "要分配的庫存數量"
-#: build/models.py:2112
+#: build/models.py:2051
msgid "Install into"
msgstr "安裝到"
-#: build/models.py:2113
+#: build/models.py:2052
msgid "Destination stock item"
msgstr "目的庫存品項"
-#: build/serializers.py:115
+#: build/serializers.py:116
msgid "Build Level"
msgstr "構建等級"
-#: build/serializers.py:129 part/serializers.py:1283
+#: build/serializers.py:130 part/serializers.py:1299
msgid "Part Name"
msgstr "零件名稱"
-#: build/serializers.py:214 build/serializers.py:969
+#: build/serializers.py:215 build/serializers.py:901
msgid "Build Output"
msgstr "產出"
-#: build/serializers.py:226
+#: build/serializers.py:227
msgid "Build output does not match the parent build"
msgstr "產出與之前的生產不匹配"
-#: build/serializers.py:230
+#: build/serializers.py:231
msgid "Output part does not match BuildOrder part"
msgstr "產出零件與生產訂單零件不匹配"
-#: build/serializers.py:234
+#: build/serializers.py:235
msgid "This build output has already been completed"
msgstr "此產出已經完成"
-#: build/serializers.py:248
+#: build/serializers.py:249
msgid "This build output is not fully allocated"
msgstr "此產出尚未完全分配"
-#: build/serializers.py:267 build/serializers.py:316
+#: build/serializers.py:268 build/serializers.py:317
msgid "Enter quantity for build output"
msgstr "輸入產出數量"
-#: build/serializers.py:338
+#: build/serializers.py:339
msgid "Integer quantity required for trackable parts"
msgstr "可追蹤的零件數量必須為整數"
-#: build/serializers.py:344
+#: build/serializers.py:345
msgid "Integer quantity required, as the bill of materials contains trackable parts"
msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數"
-#: build/serializers.py:361 order/serializers.py:877 order/serializers.py:1787
-#: stock/serializers.py:728
+#: build/serializers.py:362 order/serializers.py:879 order/serializers.py:1798
+#: order/serializers.py:2828 stock/serializers.py:730
msgid "Serial Numbers"
msgstr "序號"
-#: build/serializers.py:362
+#: build/serializers.py:363
msgid "Enter serial numbers for build outputs"
msgstr "輸出產出的序列號"
-#: build/serializers.py:368
+#: build/serializers.py:369
msgid "Stock location for build output"
msgstr "生產輸出的庫存地點"
-#: build/serializers.py:383
+#: build/serializers.py:384
msgid "Auto Allocate Serial Numbers"
msgstr "自動分配序號"
-#: build/serializers.py:385
+#: build/serializers.py:386
msgid "Automatically allocate required items with matching serial numbers"
msgstr "自動為需要項目分配對應的序號"
-#: build/serializers.py:418 order/serializers.py:963 stock/api.py:1186
-#: stock/models.py:1925
+#: build/serializers.py:419 order/serializers.py:965 stock/api.py:1195
+#: stock/models.py:1986
msgid "The following serial numbers already exist or are invalid"
msgstr "序號已存在或無效"
-#: build/serializers.py:460 build/serializers.py:516 build/serializers.py:608
+#: build/serializers.py:461 build/serializers.py:505 build/serializers.py:576
msgid "A list of build outputs must be provided"
msgstr "必須提供產出清單"
-#: build/serializers.py:493
+#: build/serializers.py:482
msgid "Stock location for scrapped outputs"
msgstr "廢品產出的庫存位置"
-#: build/serializers.py:499
+#: build/serializers.py:488
msgid "Discard Allocations"
msgstr "放棄分配"
-#: build/serializers.py:500
+#: build/serializers.py:489
msgid "Discard any stock allocations for scrapped outputs"
msgstr "取消對廢品產出的任何庫存分配"
-#: build/serializers.py:505
+#: build/serializers.py:494
msgid "Reason for scrapping build output(s)"
msgstr "廢品產出的原因"
-#: build/serializers.py:563
+#: build/serializers.py:531
msgid "Location for completed build outputs"
msgstr "已完成刪除的庫存地點"
-#: build/serializers.py:571
+#: build/serializers.py:539 order/serializers.py:2421
msgid "Accept Incomplete Allocation"
msgstr "接受不完整的分配"
-#: build/serializers.py:572
+#: build/serializers.py:540
msgid "Complete outputs if stock has not been fully allocated"
msgstr "如果庫存尚未全部分配,則完成產出"
-#: build/serializers.py:697
+#: build/serializers.py:629
msgid "Consume Allocated Stock"
msgstr "消費已分配的庫存"
-#: build/serializers.py:698
+#: build/serializers.py:630
msgid "Consume any stock which has already been allocated to this build"
msgstr "消耗已分配給此生產的任何庫存"
-#: build/serializers.py:704
+#: build/serializers.py:636
msgid "Remove Incomplete Outputs"
msgstr "移除未完成的產出"
-#: build/serializers.py:705
+#: build/serializers.py:637
msgid "Delete any build outputs which have not been completed"
msgstr "刪除所有未完成的產出"
-#: build/serializers.py:732
+#: build/serializers.py:664
msgid "Not permitted"
msgstr "不允許"
-#: build/serializers.py:733
+#: build/serializers.py:665
msgid "Accept as consumed by this build order"
msgstr "接受作為此生產訂單的消費"
-#: build/serializers.py:734
+#: build/serializers.py:666
msgid "Deallocate before completing this build order"
msgstr "完成此生產訂單前取消分配"
-#: build/serializers.py:761
+#: build/serializers.py:693
msgid "Overallocated Stock"
msgstr "超出分配的庫存"
-#: build/serializers.py:764
+#: build/serializers.py:696
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr "如何處理分配給生產訂單的額外庫存項"
-#: build/serializers.py:775
+#: build/serializers.py:707
msgid "Some stock items have been overallocated"
msgstr "有庫存項目已被過度分配"
-#: build/serializers.py:780
+#: build/serializers.py:712
msgid "Accept Unallocated"
msgstr "接受未分配"
-#: build/serializers.py:782
+#: build/serializers.py:714
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "接受庫存項未被完全分配至生產訂單"
-#: build/serializers.py:793
+#: build/serializers.py:725
msgid "Required stock has not been fully allocated"
msgstr "所需庫存尚未完全分配"
-#: build/serializers.py:798 order/serializers.py:507 order/serializers.py:1688
+#: build/serializers.py:730 order/serializers.py:509 order/serializers.py:1699
msgid "Accept Incomplete"
msgstr "接受不完整"
-#: build/serializers.py:800
+#: build/serializers.py:732
msgid "Accept that the required number of build outputs have not been completed"
msgstr "允許所需數量的產出未完成"
-#: build/serializers.py:811
+#: build/serializers.py:743
msgid "Required build quantity has not been completed"
msgstr "未完成所需生產數量"
-#: build/serializers.py:823
+#: build/serializers.py:755
msgid "Build order has open child build orders"
msgstr "生產訂單有打開的子生產訂單"
-#: build/serializers.py:826
+#: build/serializers.py:758
msgid "Build order must be in production state"
msgstr "生產訂單必須處於生產狀態"
-#: build/serializers.py:829
+#: build/serializers.py:761
msgid "Build order has incomplete outputs"
msgstr "生產訂單有未完成的產出"
-#: build/serializers.py:868
+#: build/serializers.py:800
msgid "Build Line"
msgstr "生產行"
-#: build/serializers.py:876
+#: build/serializers.py:808
msgid "Build output"
msgstr "產出"
-#: build/serializers.py:884
+#: build/serializers.py:816
msgid "Build output must point to the same build"
msgstr "生產產出必須指向相同的生產"
-#: build/serializers.py:915
+#: build/serializers.py:847
msgid "Build Line Item"
msgstr "生產行項目"
-#: build/serializers.py:933
+#: build/serializers.py:865
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part 必須與生產訂單零件相同"
-#: build/serializers.py:949 stock/serializers.py:1362
+#: build/serializers.py:881 stock/serializers.py:1385
msgid "Item must be in stock"
msgstr "商品必須有庫存"
-#: build/serializers.py:992 order/serializers.py:1674
+#: build/serializers.py:924 order/serializers.py:1685 order/serializers.py:2664
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "可用量 ({q}) 超出限制"
-#: build/serializers.py:998
+#: build/serializers.py:930
msgid "Build output must be specified for allocation of tracked parts"
msgstr "對於被追蹤的零件的分配,必須指定生產產出"
-#: build/serializers.py:1006
+#: build/serializers.py:938
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "對於未被追蹤的零件,無法指定生產產出"
-#: build/serializers.py:1030 order/serializers.py:1947
+#: build/serializers.py:962 order/serializers.py:1968 order/serializers.py:2689
msgid "Allocation items must be provided"
msgstr "必須提供分配項目"
-#: build/serializers.py:1094
+#: build/serializers.py:1026
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)"
-#: build/serializers.py:1103
+#: build/serializers.py:1035
msgid "Exclude Location"
msgstr "排除位置"
-#: build/serializers.py:1104
+#: build/serializers.py:1036
msgid "Exclude stock items from this selected location"
msgstr "從該選定的庫存地點排除庫存項"
-#: build/serializers.py:1109
+#: build/serializers.py:1041
msgid "Interchangeable Stock"
msgstr "可互換庫存"
-#: build/serializers.py:1110
+#: build/serializers.py:1042
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "在多個位置的庫存項目可以互換使用"
-#: build/serializers.py:1115
+#: build/serializers.py:1047
msgid "Substitute Stock"
msgstr "替代品庫存"
-#: build/serializers.py:1116
+#: build/serializers.py:1048
msgid "Allow allocation of substitute parts"
msgstr "允許分配可替換的零件"
-#: build/serializers.py:1121
+#: build/serializers.py:1053
msgid "Optional Items"
msgstr "可選項目"
-#: build/serializers.py:1122
+#: build/serializers.py:1054
msgid "Allocate optional BOM items to build order"
msgstr "分配可選的物料清單給生產訂單"
-#: build/serializers.py:1128
+#: build/serializers.py:1060
msgid "All Items"
msgstr "全部品項"
-#: build/serializers.py:1129
+#: build/serializers.py:1061
msgid "Untracked Items"
-msgstr ""
+msgstr "未追蹤項目"
-#: build/serializers.py:1130
+#: build/serializers.py:1062
msgid "Tracked Items"
-msgstr ""
+msgstr "已追蹤項目"
-#: build/serializers.py:1132
+#: build/serializers.py:1064
msgid "Item Type"
msgstr "品項類型"
-#: build/serializers.py:1133
+#: build/serializers.py:1065
msgid "Select item type to auto-allocate"
-msgstr ""
+msgstr "選擇要自動分配的項目類型"
-#: build/serializers.py:1187
+#: build/serializers.py:1119
msgid "BOM Reference"
msgstr "物料清單參考"
-#: build/serializers.py:1193
+#: build/serializers.py:1125
msgid "BOM Part ID"
msgstr "物料清單零件識別號碼"
-#: build/serializers.py:1200
+#: build/serializers.py:1132
msgid "BOM Part Name"
msgstr "物料清單零件名稱"
-#: build/serializers.py:1252
+#: build/serializers.py:1184
msgid "Install Into"
msgstr "安裝至"
-#: build/serializers.py:1281 build/serializers.py:1510
+#: build/serializers.py:1213 build/serializers.py:1442
msgid "Build"
msgstr "生產"
-#: build/serializers.py:1301 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:1233 company/models.py:638 order/api.py:326
+#: order/api.py:331 order/api.py:558 order/serializers.py:625
+#: stock/models.py:1068 stock/serializers.py:588
msgid "Supplier Part"
msgstr "供應商零件"
-#: build/serializers.py:1317 stock/serializers.py:649
+#: build/serializers.py:1249 stock/serializers.py:651
msgid "Allocated Quantity"
msgstr "已分配數量"
-#: build/serializers.py:1384
+#: build/serializers.py:1316
msgid "Build Reference"
msgstr "構建參考"
-#: build/serializers.py:1394
+#: build/serializers.py:1326
msgid "Part Category Name"
msgstr "零件類別名稱"
-#: build/serializers.py:1432 common/setting/system.py:507 part/models.py:1259
+#: build/serializers.py:1364 common/setting/system.py:500 part/models.py:1269
msgid "Trackable"
msgstr "可追蹤"
-#: build/serializers.py:1435
+#: build/serializers.py:1367
msgid "Inherited"
msgstr "已繼承的"
-#: build/serializers.py:1438 part/models.py:4072
+#: build/serializers.py:1370 part/models.py:4204
msgid "Allow Variants"
msgstr "允許變體"
-#: build/serializers.py:1444 build/serializers.py:1450 part/models.py:3793
-#: part/models.py:4376 stock/api.py:881
+#: build/serializers.py:1376 build/serializers.py:1382 part/models.py:3858
+#: part/models.py:4508 stock/api.py:890
msgid "BOM Item"
msgstr "物料清單項"
-#: build/serializers.py:1528 order/serializers.py:1344 part/serializers.py:1201
-#: part/serializers.py:1796
+#: build/serializers.py:1460 order/serializers.py:1346
+#: order/serializers.py:2588 part/serializers.py:1217 part/serializers.py:1800
msgid "In Production"
msgstr "生產中"
-#: build/serializers.py:1530 part/serializers.py:852 part/serializers.py:1205
+#: build/serializers.py:1462 part/serializers.py:876 part/serializers.py:1221
msgid "Scheduled to Build"
msgstr "排程生產中"
-#: build/serializers.py:1533 part/serializers.py:885
+#: build/serializers.py:1465 part/serializers.py:909
msgid "External Stock"
msgstr "外部庫存"
-#: build/serializers.py:1534 part/serializers.py:1191 part/serializers.py:1859
+#: build/serializers.py:1466 part/serializers.py:1207 part/serializers.py:1863
msgid "Available Stock"
msgstr "可用庫存"
-#: build/serializers.py:1536
+#: build/serializers.py:1468
msgid "Available Substitute Stock"
msgstr "可用的替代品庫存"
-#: build/serializers.py:1539
+#: build/serializers.py:1471
msgid "Available Variant Stock"
msgstr "可用的變體庫存"
-#: build/serializers.py:1752
+#: build/serializers.py:1684
msgid "Consumed quantity exceeds allocated quantity"
msgstr "消耗數量超過已分配數量"
-#: build/serializers.py:1789
+#: build/serializers.py:1721
msgid "Optional notes for the stock consumption"
msgstr "庫存耗用的可選備註"
-#: build/serializers.py:1806
+#: build/serializers.py:1738
msgid "Build item must point to the correct build order"
msgstr "生產項必須指向正確的生產工單"
-#: build/serializers.py:1811
+#: build/serializers.py:1743
msgid "Duplicate build item allocation"
msgstr "重複的生產項分配"
-#: build/serializers.py:1829
+#: build/serializers.py:1761
msgid "Build line must point to the correct build order"
msgstr "生產行必須指向正確的生產工單"
-#: build/serializers.py:1834
+#: build/serializers.py:1766
msgid "Duplicate build line allocation"
msgstr "重複的生產行分配"
-#: build/serializers.py:1846
+#: build/serializers.py:1778
msgid "At least one item or line must be provided"
msgstr "至少必須提供一個項目或一行"
#: build/status_codes.py:11 generic/states/tests.py:21
#: generic/states/tests.py:131 order/status_codes.py:12
#: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102
+#: order/status_codes.py:124
msgid "Pending"
msgstr "待定"
@@ -1485,52 +1467,69 @@ msgid "Production"
msgstr "生產"
#: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51
-#: order/status_codes.py:81
+#: order/status_codes.py:81 order/status_codes.py:126
msgid "On Hold"
msgstr "被掛起"
#: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53
-#: order/status_codes.py:84
+#: order/status_codes.py:84 order/status_codes.py:128
msgid "Cancelled"
msgstr "已取消"
#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:587
#: importer/status_codes.py:27 order/status_codes.py:15
-#: order/status_codes.py:52 order/status_codes.py:83
+#: order/status_codes.py:52 order/status_codes.py:83 order/status_codes.py:127
msgid "Complete"
msgstr "完成"
-#: build/tasks.py:218
+#: build/tasks.py:289
+#, python-brace-format
+msgid "Build order {build} has been completed"
+msgstr "生產工單 {build} 已經完成"
+
+#: build/tasks.py:295
+msgid "A build order has been completed"
+msgstr "一張生產工單已經完成"
+
+#: build/tasks.py:426
msgid "Stock required for build order"
msgstr "生產訂單所需庫存"
-#: build/tasks.py:228
+#: build/tasks.py:436
#, python-brace-format
msgid "Build order {build} requires additional stock"
msgstr "生產工單 {build} 需要額外庫存"
-#: build/tasks.py:252
+#: build/tasks.py:460
msgid "Overdue Build Order"
msgstr "逾期的生產訂單"
-#: build/tasks.py:257
+#: build/tasks.py:465
#, python-brace-format
msgid "Build order {bo} is now overdue"
msgstr "生產訂單 {bo} 現已逾期"
-#: common/api.py:722
+#: common/api.py:723
+msgid "Has Thumbnail"
+msgstr ""
+
+#: common/api.py:732
msgid "Is Link"
msgstr "是否鏈接"
-#: common/api.py:730
+#: common/api.py:740
msgid "Is File"
msgstr "是否為文件"
-#: common/api.py:777
+#: common/api.py:787
msgid "User does not have permission to delete these attachments"
msgstr "用户沒有權限刪除此附件"
-#: common/api.py:790
+#: common/api.py:800
+msgid "User does not have permission to edit this attachment"
+msgstr ""
+
+#: common/api.py:826
msgid "User does not have permission to delete this attachment"
msgstr "用户沒有權限刪除此附件"
@@ -1554,794 +1553,835 @@ msgstr "暫無插件"
msgid "Project Code Label"
msgstr "項目編碼標籤"
-#: common/models.py:106 common/models.py:131 common/models.py:3204
+#: common/models.py:109 common/models.py:134 common/models.py:3380
msgid "Updated"
msgstr "已是最新"
-#: common/models.py:107 common/models.py:132 order/models.py:507
+#: common/models.py:110 common/models.py:135 order/models.py:546
msgid "Timestamp of last update"
msgstr "最後更新時間戳"
-#: common/models.py:144
+#: common/models.py:147
msgid "Update By"
msgstr "更新者"
-#: common/models.py:145
+#: common/models.py:148
msgid "User who last updated this object"
msgstr "最後更新此物件的使用者"
-#: common/models.py:172
+#: common/models.py:175
msgid "Unique project code"
msgstr "唯一項目編碼"
-#: common/models.py:179
+#: common/models.py:182
msgid "Project description"
msgstr "項目描述"
-#: common/models.py:188
+#: common/models.py:191
msgid "User or group responsible for this project"
msgstr "負責此項目的用户或羣組"
-#: common/models.py:784 common/models.py:1300 common/models.py:1338
+#: common/models.py:790 common/models.py:1306 common/models.py:1344
msgid "Settings key"
msgstr "設定鍵值"
-#: common/models.py:788
+#: common/models.py:794
msgid "Settings value"
msgstr "設定值"
-#: common/models.py:843
+#: common/models.py:849
msgid "Chosen value is not a valid option"
msgstr "所選值不是一個有效的選項"
-#: common/models.py:859
+#: common/models.py:865
msgid "Value must be a boolean value"
msgstr "該值必須是布爾值"
-#: common/models.py:867
+#: common/models.py:873
msgid "Value must be an integer value"
msgstr "該值必須為整數"
-#: common/models.py:875
+#: common/models.py:881
msgid "Value must be a valid number"
msgstr "值必須為有效數字"
-#: common/models.py:900
+#: common/models.py:906
msgid "Value does not pass validation checks"
msgstr "值未通過驗證檢查"
-#: common/models.py:922
+#: common/models.py:928
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:3569 part/models.py:3597
+#: common/models.py:1352 common/models.py:1353 common/models.py:1457
+#: common/models.py:1458 common/models.py:1703 common/models.py:1704
+#: common/models.py:2137 common/models.py:2138 common/models.py:3033
+#: importer/models.py:101 part/models.py:3633 part/models.py:3661
#: 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:1375
msgid "Price break quantity"
msgstr "批發價數量"
-#: common/models.py:1376 company/serializers.py:326 order/models.py:1890
-#: order/models.py:3100
+#: common/models.py:1382 company/serializers.py:299 order/models.py:1946
+#: order/models.py:3170
msgid "Price"
msgstr "價格"
-#: common/models.py:1377
+#: common/models.py:1383
msgid "Unit price at specified quantity"
msgstr "指定數量的單位價格"
-#: common/models.py:1428 common/models.py:1613
+#: common/models.py:1434 common/models.py:1619
msgid "Endpoint"
msgstr "端點"
-#: common/models.py:1429
+#: common/models.py:1435
msgid "Endpoint at which this webhook is received"
msgstr "接收此網絡鈎子的端點"
-#: common/models.py:1439
+#: common/models.py:1445
msgid "Name for this webhook"
msgstr "此網絡鈎子的名稱"
-#: common/models.py:1443 common/models.py:2271 common/models.py:2406
+#: common/models.py:1449 common/models.py:2447 common/models.py:2582
#: 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:646 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:1449
msgid "Is this webhook active"
msgstr "網絡鈎子是否已啓用"
-#: common/models.py:1459 users/models.py:172
+#: common/models.py:1465 users/models.py:172
msgid "Token"
msgstr "令牌"
-#: common/models.py:1460
+#: common/models.py:1466
msgid "Token for access"
msgstr "訪問令牌"
-#: common/models.py:1468
+#: common/models.py:1474
msgid "Secret"
msgstr "密鑰"
-#: common/models.py:1469
+#: common/models.py:1475
msgid "Shared secret for HMAC"
msgstr "HMAC共享密鑰"
-#: common/models.py:1577 common/models.py:3094
+#: common/models.py:1583 common/models.py:3270
msgid "Message ID"
msgstr "消息ID"
-#: common/models.py:1578 common/models.py:3084
+#: common/models.py:1584 common/models.py:3260
msgid "Unique identifier for this message"
msgstr "此郵件的唯一標識符"
-#: common/models.py:1586
+#: common/models.py:1592
msgid "Host"
msgstr "主機"
-#: common/models.py:1587
+#: common/models.py:1593
msgid "Host from which this message was received"
msgstr "接收此消息的主機"
-#: common/models.py:1595
+#: common/models.py:1601
msgid "Header"
msgstr "標題"
-#: common/models.py:1596
+#: common/models.py:1602
msgid "Header of this message"
msgstr "此消息的標題"
-#: common/models.py:1603
+#: common/models.py:1609
msgid "Body"
msgstr "正文"
-#: common/models.py:1604
+#: common/models.py:1610
msgid "Body of this message"
msgstr "此消息的正文"
-#: common/models.py:1614
+#: common/models.py:1620
msgid "Endpoint on which this message was received"
msgstr "接收此消息的終點"
-#: common/models.py:1619
+#: common/models.py:1625
msgid "Worked on"
msgstr "工作於"
-#: common/models.py:1620
+#: common/models.py:1626
msgid "Was the work on this message finished?"
msgstr "這條消息的工作完成了嗎?"
-#: common/models.py:1746
+#: common/models.py:1752
msgid "Id"
msgstr "標識"
-#: common/models.py:1748
+#: common/models.py:1754
msgid "Title"
msgstr "標題"
-#: common/models.py:1750 common/models.py:2013 company/models.py:188
+#: common/models.py:1756 common/models.py:2120 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:501 order/models.py:1890 order/models.py:2465
+#: part/models.py:1176
#: report/templates/report/inventree_build_order_report.html:164
msgid "Link"
msgstr "連結"
-#: common/models.py:1752
+#: common/models.py:1758
msgid "Published"
msgstr "已發佈"
-#: common/models.py:1754
+#: common/models.py:1760
msgid "Author"
msgstr "作者"
-#: common/models.py:1756
+#: common/models.py:1762
msgid "Summary"
msgstr "摘要"
-#: common/models.py:1759 common/models.py:3061
+#: common/models.py:1765 common/models.py:3237
msgid "Read"
msgstr "閲讀"
-#: common/models.py:1759
+#: common/models.py:1765
msgid "Was this news item read?"
msgstr "這條新聞被閲讀了嗎?"
-#: common/models.py:1776
+#: common/models.py:1782
msgid "Image file"
msgstr "圖像文件"
-#: common/models.py:1788
+#: common/models.py:1794
msgid "Target model type for this image"
msgstr "此圖像的目標模型類型"
-#: common/models.py:1792
+#: common/models.py:1798
msgid "Target model ID for this image"
msgstr "此圖像的目標型號ID"
-#: common/models.py:1814
+#: common/models.py:1820
msgid "Custom Unit"
msgstr "自定義單位"
-#: common/models.py:1832
+#: common/models.py:1838
msgid "Unit symbol must be unique"
msgstr "單位符號必須唯一"
-#: common/models.py:1847
+#: common/models.py:1853
msgid "Unit name must be a valid identifier"
msgstr "單位名稱必須是有效的標識符"
-#: common/models.py:1866
+#: common/models.py:1872
msgid "Unit name"
msgstr "單位名稱"
-#: common/models.py:1873
+#: common/models.py:1879
msgid "Symbol"
msgstr "符號"
-#: common/models.py:1874
+#: common/models.py:1880
msgid "Optional unit symbol"
msgstr "可選單位符號"
-#: common/models.py:1880
+#: common/models.py:1886
msgid "Definition"
msgstr "定義"
-#: common/models.py:1881
+#: common/models.py:1887
msgid "Unit definition"
msgstr "單位定義"
-#: common/models.py:1941 common/models.py:2004 stock/models.py:3073
+#: common/models.py:1951 common/models.py:2103 stock/models.py:3146
#: stock/serializers.py:258
msgid "Attachment"
msgstr "附件"
-#: common/models.py:1958
+#: common/models.py:1997
msgid "Missing file"
msgstr "缺少檔案"
-#: common/models.py:1959
+#: common/models.py:1998
msgid "Missing external link"
msgstr "缺少外部連結"
-#: common/models.py:1996 common/models.py:2542
+#: common/models.py:2043
+msgid "No file attached to rename"
+msgstr ""
+
+#: common/models.py:2046
+msgid "Filename cannot be empty"
+msgstr ""
+
+#: common/models.py:2051 common/models.py:2071
+msgid "Invalid filename"
+msgstr ""
+
+#: common/models.py:2057
+msgid "Cannot change file extension"
+msgstr ""
+
+#: common/models.py:2076
+msgid "A file with this name already exists"
+msgstr ""
+
+#: common/models.py:2083
+msgid "Failed to save renamed file"
+msgstr ""
+
+#: common/models.py:2095 common/models.py:2718
msgid "Model type"
msgstr "模型類型"
-#: common/models.py:1997
+#: common/models.py:2096
msgid "Target model type for image"
msgstr "圖像的目標模型類型"
-#: common/models.py:2005
+#: common/models.py:2105
msgid "Select file to attach"
msgstr "選擇附件"
-#: common/models.py:2021
+#: common/models.py:2111
+msgid "Thumbnail"
+msgstr ""
+
+#: common/models.py:2112
+msgid "Thumbnail image for this attachment"
+msgstr ""
+
+#: common/models.py:2128
msgid "Comment"
msgstr "註解"
-#: common/models.py:2022
+#: common/models.py:2129
msgid "Attachment comment"
msgstr "附件評論"
-#: common/models.py:2038
+#: common/models.py:2145
msgid "Upload date"
msgstr "上傳日期"
-#: common/models.py:2039
+#: common/models.py:2146
msgid "Date the file was uploaded"
msgstr "上傳文件的日期"
-#: common/models.py:2043
+#: common/models.py:2151
+msgid "Is image"
+msgstr ""
+
+#: common/models.py:2152
+msgid "True if this attachment is a valid image file"
+msgstr ""
+
+#: common/models.py:2156
msgid "File size"
msgstr "文件大小"
-#: common/models.py:2043
+#: common/models.py:2156
msgid "File size in bytes"
msgstr "文件大小,以字節為單位"
-#: common/models.py:2081 common/serializers.py:796
+#: common/models.py:2194 common/serializers.py:807
msgid "Invalid model type specified for attachment"
msgstr "為附件指定的模型類型無效"
-#: common/models.py:2102
+#: common/models.py:2278
msgid "Custom State"
msgstr "自定狀態"
-#: common/models.py:2103
+#: common/models.py:2279
msgid "Custom States"
msgstr "定製狀態"
-#: common/models.py:2108
+#: common/models.py:2284
msgid "Reference Status Set"
msgstr "參考狀態設定"
-#: common/models.py:2109
+#: common/models.py:2285
msgid "Status set that is extended with this custom state"
msgstr "使用此自定義狀態擴展狀態的狀態集"
-#: common/models.py:2113 generic/states/serializers.py:18
+#: common/models.py:2289 generic/states/serializers.py:18
msgid "Logical Key"
msgstr "邏輯密鑰"
-#: common/models.py:2115
+#: common/models.py:2291
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:2296 common/models.py:2563 machine/serializers.py:27
+#: report/templates/report/inventree_test_report.html:104 stock/models.py:3138
msgid "Value"
msgstr "值"
-#: common/models.py:2121
+#: common/models.py:2297
msgid "Numerical value that will be saved in the models database"
msgstr "將儲存於模型資料庫中的數值"
-#: common/models.py:2127
+#: common/models.py:2303
msgid "Name of the state"
msgstr "狀態名"
-#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22
+#: common/models.py:2312 common/models.py:2569 generic/states/serializers.py:22
msgid "Label"
msgstr "標籤"
-#: common/models.py:2137
+#: common/models.py:2313
msgid "Label that will be displayed in the frontend"
msgstr "在前端顯示的標籤"
-#: common/models.py:2144 generic/states/serializers.py:24
+#: common/models.py:2320 generic/states/serializers.py:24
msgid "Color"
msgstr "顏色"
-#: common/models.py:2145
+#: common/models.py:2321
msgid "Color that will be displayed in the frontend"
msgstr "將在前端顯示顏色"
-#: common/models.py:2153
+#: common/models.py:2329
msgid "Model"
msgstr "模式"
-#: common/models.py:2154
+#: common/models.py:2330
msgid "Model this state is associated with"
msgstr "該狀態關聯的模型"
-#: common/models.py:2169
+#: common/models.py:2345
msgid "Model must be selected"
msgstr "必須選定模型"
-#: common/models.py:2172
+#: common/models.py:2348
msgid "Key must be selected"
msgstr "必須選取密鑰"
-#: common/models.py:2175
+#: common/models.py:2351
msgid "Logical key must be selected"
msgstr "必須選中邏輯密鑰"
-#: common/models.py:2179
+#: common/models.py:2355
msgid "Key must be different from logical key"
msgstr "密鑰必須不同於邏輯密鑰"
-#: common/models.py:2186
+#: common/models.py:2362
msgid "Valid reference status class must be provided"
msgstr "必須提供有效參考狀態類別"
-#: common/models.py:2192
+#: common/models.py:2368
msgid "Key must be different from the logical keys of the reference status"
msgstr "密鑰必須不同於參考狀態的邏輯密鑰"
-#: common/models.py:2199
+#: common/models.py:2375
msgid "Logical key must be in the logical keys of the reference status"
msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中"
-#: common/models.py:2206
+#: common/models.py:2382
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:2422 common/models.py:2557 common/models.py:2763
msgid "Selection List"
msgstr "選擇列表"
-#: common/models.py:2247
+#: common/models.py:2423
msgid "Selection Lists"
msgstr "選擇列表"
-#: common/models.py:2252
+#: common/models.py:2428
msgid "Name of the selection list"
msgstr "選擇列表名稱"
-#: common/models.py:2259
+#: common/models.py:2435
msgid "Description of the selection list"
msgstr "選擇列表描述"
-#: common/models.py:2265 part/models.py:1287
+#: common/models.py:2441 part/models.py:1297
msgid "Locked"
msgstr "已鎖定"
-#: common/models.py:2266
+#: common/models.py:2442
msgid "Is this selection list locked?"
msgstr "此選擇列表是否已鎖定?"
-#: common/models.py:2272
+#: common/models.py:2448
msgid "Can this selection list be used?"
msgstr "此選擇列表是否可使用?"
-#: common/models.py:2280
+#: common/models.py:2456
msgid "Source Plugin"
msgstr "來源模組"
-#: common/models.py:2281
+#: common/models.py:2457
msgid "Plugin which provides the selection list"
msgstr "提供此選擇列表的模組"
-#: common/models.py:2286
+#: common/models.py:2462
msgid "Source String"
msgstr "來源字串"
-#: common/models.py:2287
+#: common/models.py:2463
msgid "Optional string identifying the source used for this list"
msgstr "用於標示此列表來源的可選字串"
-#: common/models.py:2296
+#: common/models.py:2472
msgid "Default Entry"
msgstr "預設項目"
-#: common/models.py:2297
+#: common/models.py:2473
msgid "Default entry for this selection list"
msgstr "此選擇列表的預設項目"
-#: common/models.py:2302 common/models.py:3199
+#: common/models.py:2478 common/models.py:3375
msgid "Created"
msgstr "已創建"
-#: common/models.py:2303
+#: common/models.py:2479
msgid "Date and time that the selection list was created"
msgstr "選擇列表建立的日期與時間"
-#: common/models.py:2308
+#: common/models.py:2484
msgid "Last Updated"
msgstr "最近更新"
-#: common/models.py:2309
+#: common/models.py:2485
msgid "Date and time that the selection list was last updated"
msgstr "選擇列表最近更新的日期與時間"
-#: common/models.py:2371
+#: common/models.py:2547
msgid "Selection List Entry"
msgstr "選擇列表項目"
-#: common/models.py:2372
+#: common/models.py:2548
msgid "Selection List Entries"
msgstr "選擇列表項目"
-#: common/models.py:2382
+#: common/models.py:2558
msgid "Selection list to which this entry belongs"
msgstr "該項目所屬的選擇列表"
-#: common/models.py:2388
+#: common/models.py:2564
msgid "Value of the selection list entry"
msgstr "選擇列表項目的值"
-#: common/models.py:2394
+#: common/models.py:2570
msgid "Label for the selection list entry"
msgstr "選擇列表項目的標籤"
-#: common/models.py:2400
+#: common/models.py:2576
msgid "Description of the selection list entry"
msgstr "選擇列表項目的描述"
-#: common/models.py:2407
+#: common/models.py:2583
msgid "Is this selection list entry active?"
msgstr "此選擇列表項目是否啟用?"
-#: common/models.py:2441
+#: common/models.py:2617
msgid "Parameter Template"
msgstr "參數模板"
-#: common/models.py:2442
+#: common/models.py:2618
msgid "Parameter Templates"
-msgstr ""
+msgstr "參數範本"
-#: common/models.py:2479
+#: common/models.py:2655
msgid "Checkbox parameters cannot have units"
msgstr "勾選框參數不能有單位"
-#: common/models.py:2484
+#: common/models.py:2660
msgid "Checkbox parameters cannot have choices"
msgstr "複選框參數不能有選項"
-#: common/models.py:2504 part/models.py:3667
+#: common/models.py:2680 part/models.py:3731
msgid "Choices must be unique"
msgstr "選擇必須是唯一的"
-#: common/models.py:2521
+#: common/models.py:2697
msgid "Parameter template name must be unique"
msgstr "參數模板名稱必須是唯一的"
-#: common/models.py:2543
+#: common/models.py:2719
msgid "Target model type for this parameter template"
-msgstr ""
+msgstr "此參數範本的目標模型類型"
-#: common/models.py:2549
+#: common/models.py:2725
msgid "Parameter Name"
msgstr "參數名稱"
-#: common/models.py:2555 part/models.py:1240
+#: common/models.py:2731 part/models.py:1250
msgid "Units"
msgstr "單位"
-#: common/models.py:2556
+#: common/models.py:2732
msgid "Physical units for this parameter"
msgstr "此參數的物理單位"
-#: common/models.py:2564
+#: common/models.py:2740
msgid "Parameter description"
msgstr "參數説明"
-#: common/models.py:2570
+#: common/models.py:2746
msgid "Checkbox"
msgstr "勾選框"
-#: common/models.py:2571
+#: common/models.py:2747
msgid "Is this parameter a checkbox?"
msgstr "此參數是否為勾選框?"
-#: common/models.py:2576 part/models.py:3754
+#: common/models.py:2752 part/models.py:3818
msgid "Choices"
msgstr "選項"
-#: common/models.py:2577
+#: common/models.py:2753
msgid "Valid choices for this parameter (comma-separated)"
msgstr "此參數的有效選擇 (逗號分隔)"
-#: common/models.py:2588
+#: common/models.py:2764
msgid "Selection list for this parameter"
msgstr "此參數的選擇清單"
-#: common/models.py:2593 part/models.py:3729 report/models.py:290
+#: common/models.py:2769 part/models.py:3793 report/models.py:292
msgid "Enabled"
msgstr "已啓用"
-#: common/models.py:2594
+#: common/models.py:2770
msgid "Is this parameter template enabled?"
-msgstr ""
+msgstr "是否啟用此參數範本?"
-#: common/models.py:2635
+#: common/models.py:2811
msgid "Parameter"
msgstr "參數"
-#: common/models.py:2636
+#: common/models.py:2812
msgid "Parameters"
msgstr "參數集"
-#: common/models.py:2682
+#: common/models.py:2858
msgid "Invalid choice for parameter value"
msgstr "無效的參數值選擇"
-#: common/models.py:2752 common/serializers.py:892
+#: common/models.py:2928 common/serializers.py:903
msgid "Invalid model type specified for parameter"
-msgstr ""
+msgstr "為參數指定的模型類型無效"
-#: common/models.py:2788
+#: common/models.py:2964
msgid "Model ID"
-msgstr ""
+msgstr "模型 ID"
-#: common/models.py:2789
+#: common/models.py:2965
msgid "ID of the target model for this parameter"
-msgstr ""
+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:2974 common/setting/system.py:470 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:2975
msgid "Parameter template"
-msgstr ""
+msgstr "參數範本"
-#: common/models.py:2804 common/models.py:2846 importer/models.py:581
+#: common/models.py:2980 common/models.py:3022 importer/models.py:581
msgid "Data"
msgstr "數據"
-#: common/models.py:2805
+#: common/models.py:2981
msgid "Parameter Value"
msgstr "參數值"
-#: common/models.py:2814 company/models.py:826 order/serializers.py:895
-#: order/serializers.py:2144 part/models.py:4047 part/models.py:4416
+#: common/models.py:2990 company/models.py:826 order/serializers.py:897
+#: order/serializers.py:2165 part/models.py:4179 part/models.py:4548
#: report/templates/report/inventree_bill_of_materials_report.html:140
#: report/templates/report/inventree_purchase_order_report.html:39
#: report/templates/report/inventree_return_order_report.html:27
#: report/templates/report/inventree_sales_order_report.html:32
#: report/templates/report/inventree_stock_location_report.html:105
-#: stock/serializers.py:842
+#: report/templates/report/inventree_transfer_order_report.html:29
+#: stock/serializers.py:844
msgid "Note"
msgstr "備註"
-#: common/models.py:2815 stock/serializers.py:747
+#: common/models.py:2991 stock/serializers.py:749
msgid "Optional note field"
msgstr "可選註釋字段"
-#: common/models.py:2842
+#: common/models.py:3018
msgid "Barcode Scan"
msgstr "掃描條碼"
-#: common/models.py:2847
+#: common/models.py:3023
msgid "Barcode data"
msgstr "條碼數據"
-#: common/models.py:2858
+#: common/models.py:3034
msgid "User who scanned the barcode"
msgstr "掃描條碼"
-#: common/models.py:2863 importer/models.py:70
+#: common/models.py:3039 importer/models.py:70
msgid "Timestamp"
msgstr "時間戳"
-#: common/models.py:2864
+#: common/models.py:3040
msgid "Date and time of the barcode scan"
msgstr "掃描條碼的日期和時間"
-#: common/models.py:2870
+#: common/models.py:3046
msgid "URL endpoint which processed the barcode"
msgstr "處理條碼的 URL 終點"
-#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93
+#: common/models.py:3053 order/models.py:1936 plugin/serializers.py:93
msgid "Context"
msgstr "上下文"
-#: common/models.py:2878
+#: common/models.py:3054
msgid "Context data for the barcode scan"
msgstr "掃描條碼的上下文數據"
-#: common/models.py:2885
+#: common/models.py:3061
msgid "Response"
msgstr "響應"
-#: common/models.py:2886
+#: common/models.py:3062
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:3068 report/templates/report/inventree_test_report.html:103
+#: stock/models.py:3132
msgid "Result"
msgstr "結果"
-#: common/models.py:2893
+#: common/models.py:3069
msgid "Was the barcode scan successful?"
msgstr "條碼掃描成功嗎?"
-#: common/models.py:2975
+#: common/models.py:3151
msgid "An error occurred"
msgstr "發生錯誤"
-#: common/models.py:2996
+#: common/models.py:3172
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:3219
msgid "Email Message"
msgstr "電子郵件訊息"
-#: common/models.py:3044
+#: common/models.py:3220
msgid "Email Messages"
msgstr "電子郵件訊息"
-#: common/models.py:3051
+#: common/models.py:3227
msgid "Announced"
msgstr "已公告"
-#: common/models.py:3053
+#: common/models.py:3229
msgid "Sent"
msgstr "已發送"
-#: common/models.py:3054
+#: common/models.py:3230
msgid "Failed"
msgstr "失敗"
-#: common/models.py:3057
+#: common/models.py:3233
msgid "Delivered"
msgstr "已送達"
-#: common/models.py:3065
+#: common/models.py:3241
msgid "Confirmed"
msgstr "已確認"
-#: common/models.py:3071
+#: common/models.py:3247
msgid "Inbound"
msgstr "入站"
-#: common/models.py:3072
+#: common/models.py:3248
msgid "Outbound"
msgstr "出站"
-#: common/models.py:3077
+#: common/models.py:3253
msgid "No Reply"
msgstr "不回覆"
-#: common/models.py:3078
+#: common/models.py:3254
msgid "Track Delivery"
msgstr "追蹤投遞"
-#: common/models.py:3079
+#: common/models.py:3255
msgid "Track Read"
msgstr "追蹤已讀"
-#: common/models.py:3080
+#: common/models.py:3256
msgid "Track Click"
msgstr "追蹤點擊"
-#: common/models.py:3083 common/models.py:3186
+#: common/models.py:3259 common/models.py:3362
msgid "Global ID"
msgstr "全域 ID"
-#: common/models.py:3096
+#: common/models.py:3272
msgid "Identifier for this message (might be supplied by external system)"
msgstr "此訊息的識別碼(可能由外部系統提供)"
-#: common/models.py:3103
+#: common/models.py:3279
msgid "Thread ID"
msgstr "討論串 ID"
-#: common/models.py:3105
+#: common/models.py:3281
msgid "Identifier for this message thread (might be supplied by external system)"
msgstr "此訊息討論串的識別碼(可能由外部系統提供)"
-#: common/models.py:3114
+#: common/models.py:3290
msgid "Thread"
msgstr "討論串"
-#: common/models.py:3115
+#: common/models.py:3291
msgid "Linked thread for this message"
msgstr "此訊息所連結的討論串"
-#: common/models.py:3131
+#: common/models.py:3307
msgid "Priority"
msgstr "優先序"
-#: common/models.py:3173
+#: common/models.py:3349
msgid "Email Thread"
msgstr "電子郵件討論串"
-#: common/models.py:3174
+#: common/models.py:3350
msgid "Email Threads"
msgstr "電子郵件討論串"
-#: common/models.py:3180 generic/states/serializers.py:16
+#: common/models.py:3356 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:3359
msgid "Unique key for this thread (used to identify the thread)"
msgstr "此討論串的唯一鍵(用於辨識)"
-#: common/models.py:3187
+#: common/models.py:3363
msgid "Unique identifier for this thread"
msgstr "此討論串的唯一識別碼"
-#: common/models.py:3194
+#: common/models.py:3370
msgid "Started Internal"
msgstr "內部建立"
-#: common/models.py:3195
+#: common/models.py:3371
msgid "Was this thread started internally?"
msgstr "此討論串是否為內部建立?"
-#: common/models.py:3200
+#: common/models.py:3376
msgid "Date and time that the thread was created"
msgstr "討論串建立的日期時間"
-#: common/models.py:3205
+#: common/models.py:3381
msgid "Date and time that the thread was last updated"
msgstr "討論串最後更新的日期時間"
@@ -2363,7 +2403,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:609
msgid "Items Received"
msgstr "收到的物品"
@@ -2377,11 +2417,11 @@ msgstr "已收到退貨訂單中的物品"
#: common/serializers.py:125
msgid "Indicates if changing this setting requires confirmation"
-msgstr ""
+msgstr "指示變更此設定是否需要確認"
#: common/serializers.py:139
msgid "This setting requires confirmation before changing. Please confirm the change."
-msgstr ""
+msgstr "變更此設定前需要確認。請確認變更。"
#: common/serializers.py:172
msgid "Indicates if the setting is overridden by an environment variable"
@@ -2451,25 +2491,25 @@ msgstr "關鍵字參數"
msgid "Task keyword arguments"
msgstr "任務關鍵詞參數"
-#: common/serializers.py:764
+#: common/serializers.py:775
msgid "Filename"
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
+#: common/serializers.py:782 common/serializers.py:849
+#: common/serializers.py:925 importer/models.py:90 report/api.py:41
+#: report/models.py:298 report/serializers.py:71
msgid "Model Type"
msgstr "模型類型"
-#: common/serializers.py:799
+#: common/serializers.py:810
msgid "User does not have permission to create or edit attachments for this model"
msgstr "用户無權為此模式創建或編輯附件"
-#: common/serializers.py:895
+#: common/serializers.py:906
msgid "User does not have permission to create or edit parameters for this model"
-msgstr ""
+msgstr "使用者沒有權限建立或編輯此模型的參數"
-#: common/serializers.py:970 common/serializers.py:1073
+#: common/serializers.py:981 common/serializers.py:1084
msgid "Selection list is locked"
msgstr "選擇列表已鎖定"
@@ -2547,19 +2587,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 "以超級使用者身分登入時,在 UI 中顯示警告橫幅"
#: 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 "以管理員身分登入時,在 UI 中顯示警告橫幅"
#: common/setting/system.py:251 company/models.py:147 company/models.py:148
msgid "Company name"
@@ -2601,13 +2641,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:307
+#: common/setting/system.py:320 common/setting/system.py:328
+#: common/setting/system.py:335 common/setting/system.py:344
+#: common/setting/system.py:353 common/setting/system.py:600
+#: common/setting/system.py:628 common/setting/system.py:747
+#: common/setting/system.py:1184 common/setting/system.py:1200
+#: common/setting/system.py:1217
msgid "days"
msgstr "天"
@@ -2620,1032 +2660,1110 @@ msgid "Currency update plugin to use"
msgstr "使用貨幣更新插件"
#: common/setting/system.py:290
-msgid "Download from URL"
-msgstr "從URL下載"
+msgid "Upload Size Limit"
+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 "下載大小限制"
+msgid "Maximum allowable upload size for images and files"
+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:298
msgid "Require schema specification when validating URLs"
msgstr "驗證 URL 時需要 schema 規範"
-#: common/setting/system.py:316
+#: common/setting/system.py:303
msgid "Update Check Interval"
msgstr "更新檢查間隔"
-#: common/setting/system.py:317
+#: common/setting/system.py:304
msgid "How often to check for updates (set to zero to disable)"
msgstr "檢查更新的頻率(設置為零以禁用)"
-#: common/setting/system.py:323
+#: common/setting/system.py:310
msgid "Automatic Backup"
msgstr "自動備份"
-#: common/setting/system.py:324
+#: common/setting/system.py:311
msgid "Enable automatic backup of database and media files"
msgstr "啟動資料庫和媒體文件自動備份"
-#: common/setting/system.py:329
+#: common/setting/system.py:316
msgid "Auto Backup Interval"
msgstr "自動備份間隔"
-#: common/setting/system.py:330
+#: common/setting/system.py:317
msgid "Specify number of days between automated backup events"
msgstr "指定自動備份之間的間隔天數"
-#: common/setting/system.py:336
+#: common/setting/system.py:323
msgid "Task Deletion Interval"
msgstr "任務刪除間隔"
-#: common/setting/system.py:338
+#: common/setting/system.py:325
msgid "Background task results will be deleted after specified number of days"
msgstr "後台任務結果將在指定天數後刪除"
-#: common/setting/system.py:345
+#: common/setting/system.py:332
msgid "Error Log Deletion Interval"
msgstr "錯誤日誌刪除間隔"
-#: common/setting/system.py:346
+#: common/setting/system.py:333
msgid "Error logs will be deleted after specified number of days"
msgstr "錯誤日誌將在指定天數後被刪除"
-#: common/setting/system.py:352
+#: common/setting/system.py:339
msgid "Notification Deletion Interval"
msgstr "通知刪除間隔"
-#: common/setting/system.py:354
+#: common/setting/system.py:341
msgid "User notifications will be deleted after specified number of days"
msgstr "用户通知將在指定天數後被刪除"
-#: common/setting/system.py:361
+#: common/setting/system.py:348
msgid "Email Deletion Interval"
msgstr "電子郵件刪除間隔"
-#: common/setting/system.py:363
+#: common/setting/system.py:350
msgid "Email messages will be deleted after specified number of days"
msgstr "電子郵件訊息將在指定天數後刪除"
-#: common/setting/system.py:370
+#: common/setting/system.py:357
msgid "Protect Email Log"
msgstr "保護電子郵件日誌"
-#: common/setting/system.py:371
+#: common/setting/system.py:358
msgid "Prevent deletion of email log entries"
msgstr "防止刪除電子郵件日誌紀錄"
-#: common/setting/system.py:376
+#: common/setting/system.py:363
msgid "Barcode Support"
msgstr "條形碼支持"
-#: common/setting/system.py:377
+#: common/setting/system.py:364
msgid "Enable barcode scanner support in the web interface"
msgstr "在網頁界面啓用條形碼掃描器支持"
-#: common/setting/system.py:382
+#: common/setting/system.py:369
msgid "Store Barcode Results"
msgstr "存儲條碼結果"
-#: common/setting/system.py:383
+#: common/setting/system.py:370
msgid "Store barcode scan results in the database"
msgstr "存儲條碼掃描結果"
-#: common/setting/system.py:388
+#: common/setting/system.py:375
msgid "Barcode Scans Maximum Count"
msgstr "條碼掃描最大計數"
-#: common/setting/system.py:389
+#: common/setting/system.py:376
msgid "Maximum number of barcode scan results to store"
msgstr "存儲條碼掃描結果的最大數量"
-#: common/setting/system.py:394
+#: common/setting/system.py:381
msgid "Barcode Input Delay"
msgstr "條形碼掃描延遲設置"
-#: common/setting/system.py:395
+#: common/setting/system.py:382
msgid "Barcode input processing delay time"
msgstr "條形碼輸入處理延遲時間"
-#: common/setting/system.py:401
+#: common/setting/system.py:388
msgid "Barcode Webcam Support"
msgstr "條碼攝像頭支持"
-#: common/setting/system.py:402
+#: common/setting/system.py:389
msgid "Allow barcode scanning via webcam in browser"
msgstr "允許通過網絡攝像頭掃描條形碼"
-#: common/setting/system.py:407
+#: common/setting/system.py:394
msgid "Barcode Show Data"
msgstr "條形碼顯示數據"
-#: common/setting/system.py:408
+#: common/setting/system.py:395
msgid "Display barcode data in browser as text"
msgstr "在瀏覽器中將條形碼數據顯示為文本"
-#: common/setting/system.py:413
+#: common/setting/system.py:400
msgid "Barcode Generation Plugin"
msgstr "條形碼生成插件"
-#: common/setting/system.py:414
+#: common/setting/system.py:401
msgid "Plugin to use for internal barcode data generation"
msgstr "用於內部條形碼數據生成的插件"
-#: common/setting/system.py:419
+#: common/setting/system.py:406
+msgid "Part Locking"
+msgstr ""
+
+#: common/setting/system.py:407
+msgid "Enable locking of parts to prevent modification"
+msgstr ""
+
+#: common/setting/system.py:412
msgid "Part Revisions"
msgstr "零件修訂"
-#: common/setting/system.py:420
+#: common/setting/system.py:413
msgid "Enable revision field for Part"
msgstr "啓用零件修訂字段"
-#: common/setting/system.py:425
+#: common/setting/system.py:418
msgid "Assembly Revision Only"
msgstr "僅限裝配修訂版本"
-#: common/setting/system.py:426
+#: common/setting/system.py:419
msgid "Only allow revisions for assembly parts"
msgstr "僅允許對裝配零件進行修訂"
-#: common/setting/system.py:431
+#: common/setting/system.py:424
msgid "Allow Deletion from Assembly"
msgstr "允許從裝配中刪除"
-#: common/setting/system.py:432
+#: common/setting/system.py:425
msgid "Allow deletion of parts which are used in an assembly"
msgstr "允許刪除已在裝配中使用的零件"
-#: common/setting/system.py:437
+#: common/setting/system.py:430
msgid "IPN Regex"
msgstr "IPN 內部零件號"
-#: common/setting/system.py:438
+#: common/setting/system.py:431
msgid "Regular expression pattern for matching Part IPN"
msgstr "匹配零件 IPN(內部零件號)的正則表達式模式"
-#: common/setting/system.py:441
+#: common/setting/system.py:434
msgid "Allow Duplicate IPN"
msgstr "允許重複的 IPN(內部零件號)"
-#: common/setting/system.py:442
+#: common/setting/system.py:435
msgid "Allow multiple parts to share the same IPN"
msgstr "允許多個零件共享相同的 IPN(內部零件號)"
-#: common/setting/system.py:447
+#: common/setting/system.py:440
msgid "Allow Editing IPN"
msgstr "允許編輯 IPN(內部零件號)"
-#: common/setting/system.py:448
+#: common/setting/system.py:441
msgid "Allow changing the IPN value while editing a part"
msgstr "允許編輯零件時更改內部零件號"
-#: common/setting/system.py:453
+#: common/setting/system.py:446
msgid "Copy Part BOM Data"
msgstr "複製零件物料清單數據"
-#: common/setting/system.py:454
+#: common/setting/system.py:447
msgid "Copy BOM data by default when duplicating a part"
msgstr "複製零件時默認複製物料清單數據"
-#: common/setting/system.py:459
+#: common/setting/system.py:452
msgid "Copy Part Parameter Data"
msgstr "複製零件參數數據"
-#: common/setting/system.py:460
+#: common/setting/system.py:453
msgid "Copy parameter data by default when duplicating a part"
msgstr "複製零件時默認複製參數數據"
-#: common/setting/system.py:465
+#: common/setting/system.py:458
msgid "Copy Part Test Data"
msgstr "複製零件測試數據"
-#: common/setting/system.py:466
+#: common/setting/system.py:459
msgid "Copy test data by default when duplicating a part"
msgstr "複製零件時默認複製測試數據"
-#: common/setting/system.py:471
+#: common/setting/system.py:464
msgid "Copy Category Parameter Templates"
msgstr "複製類別參數模板"
-#: common/setting/system.py:472
+#: common/setting/system.py:465
msgid "Copy category parameter templates when creating a part"
msgstr "創建零件時複製類別參數模板"
-#: common/setting/system.py:478
+#: common/setting/system.py:471
msgid "Parts are templates by default"
msgstr "零件默認為模板"
-#: common/setting/system.py:484
+#: common/setting/system.py:477
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:482 part/models.py:1263 part/serializers.py:1767
+#: part/serializers.py:1775
msgid "Component"
msgstr "組件"
-#: common/setting/system.py:490
+#: common/setting/system.py:483
msgid "Parts can be used as sub-components by default"
msgstr "默認情況下,零件可用作子部件"
-#: common/setting/system.py:495 part/models.py:1271
+#: common/setting/system.py:488 part/models.py:1281
msgid "Purchaseable"
msgstr "可購買"
-#: common/setting/system.py:496
+#: common/setting/system.py:489
msgid "Parts are purchaseable by default"
msgstr "默認情況下可購買零件"
-#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642
+#: common/setting/system.py:494 part/models.py:1287 stock/api.py:647
msgid "Salable"
msgstr "可銷售"
-#: common/setting/system.py:502
+#: common/setting/system.py:495
msgid "Parts are salable by default"
msgstr "零件默認為可銷售"
-#: common/setting/system.py:508
+#: common/setting/system.py:501
msgid "Parts are trackable by default"
msgstr "默認情況下可跟蹤零件"
-#: common/setting/system.py:513 part/models.py:1293
+#: common/setting/system.py:506 part/models.py:1303
msgid "Virtual"
msgstr "虛擬的"
-#: common/setting/system.py:514
+#: common/setting/system.py:507
msgid "Parts are virtual by default"
msgstr "默認情況下,零件是虛擬的"
-#: common/setting/system.py:519
+#: common/setting/system.py:512
msgid "Show related parts"
msgstr "顯示相關零件"
-#: common/setting/system.py:520
+#: common/setting/system.py:513
msgid "Display related parts for a part"
msgstr "顯示零件的相關零件"
-#: common/setting/system.py:525
+#: common/setting/system.py:518
msgid "Initial Stock Data"
msgstr "初始庫存數據"
-#: common/setting/system.py:526
+#: common/setting/system.py:519
msgid "Allow creation of initial stock when adding a new part"
msgstr "允許在添加新零件時創建初始庫存"
-#: common/setting/system.py:531
+#: common/setting/system.py:524
msgid "Initial Supplier Data"
msgstr "初始供應商數據"
-#: common/setting/system.py:533
+#: common/setting/system.py:526
msgid "Allow creation of initial supplier data when adding a new part"
msgstr "允許在添加新零件時創建初始供應商數據"
-#: common/setting/system.py:539
+#: common/setting/system.py:532
msgid "Part Name Display Format"
msgstr "零件名稱顯示格式"
-#: common/setting/system.py:540
+#: common/setting/system.py:533
msgid "Format to display the part name"
msgstr "顯示零件名稱的格式"
-#: common/setting/system.py:546
+#: common/setting/system.py:539
msgid "Part Category Default Icon"
msgstr "零件類別默認圖標"
-#: common/setting/system.py:547
+#: common/setting/system.py:540
msgid "Part category default icon (empty means no icon)"
msgstr "零件類別默認圖標 (空表示沒有圖標)"
-#: common/setting/system.py:552
+#: common/setting/system.py:545
msgid "Minimum Pricing Decimal Places"
msgstr "最小定價小數位數"
-#: common/setting/system.py:554
+#: common/setting/system.py:547
msgid "Minimum number of decimal places to display when rendering pricing data"
msgstr "呈現定價數據時顯示的最小小數位數"
-#: common/setting/system.py:565
+#: common/setting/system.py:558
msgid "Maximum Pricing Decimal Places"
msgstr "最大定價小數位數"
-#: common/setting/system.py:567
+#: common/setting/system.py:560
msgid "Maximum number of decimal places to display when rendering pricing data"
msgstr "呈現定價數據時顯示的最大小數位數"
-#: common/setting/system.py:578
+#: common/setting/system.py:571
msgid "Use Supplier Pricing"
msgstr "使用供應商定價"
-#: common/setting/system.py:580
+#: common/setting/system.py:573
msgid "Include supplier price breaks in overall pricing calculations"
msgstr "將供應商的價批發價納入總體定價計算中"
-#: common/setting/system.py:586
+#: common/setting/system.py:579
msgid "Purchase History Override"
msgstr "購買歷史記錄覆蓋"
-#: common/setting/system.py:588
+#: common/setting/system.py:581
msgid "Historical purchase order pricing overrides supplier price breaks"
msgstr "歷史採購訂單定價優先於供應商批發價"
-#: common/setting/system.py:594
+#: common/setting/system.py:587
msgid "Use Stock Item Pricing"
msgstr "使用庫存項定價"
-#: common/setting/system.py:596
+#: common/setting/system.py:589
msgid "Use pricing from manually entered stock data for pricing calculations"
msgstr "使用手動輸入的庫存數據進行定價計算"
-#: common/setting/system.py:602
+#: common/setting/system.py:595
msgid "Stock Item Pricing Age"
msgstr "庫存項目定價時間"
-#: common/setting/system.py:604
+#: common/setting/system.py:597
msgid "Exclude stock items older than this number of days from pricing calculations"
msgstr "從定價計算中排除超過此天數的庫存項目"
-#: common/setting/system.py:611
+#: common/setting/system.py:604
msgid "Use Variant Pricing"
msgstr "使用變體定價"
-#: common/setting/system.py:612
+#: common/setting/system.py:605
msgid "Include variant pricing in overall pricing calculations"
msgstr "在整體定價計算中包括變體定價"
-#: common/setting/system.py:617
+#: common/setting/system.py:610
msgid "Active Variants Only"
msgstr "僅限活躍變體"
-#: common/setting/system.py:619
+#: common/setting/system.py:612
msgid "Only use active variant parts for calculating variant pricing"
msgstr "僅使用活躍變體零件計算變體價格"
-#: common/setting/system.py:625
+#: common/setting/system.py:618
msgid "Auto Update Pricing"
msgstr "自動更新定價"
-#: common/setting/system.py:627
+#: common/setting/system.py:620
msgid "Automatically update part pricing when internal data changes"
msgstr "當內部資料變更時自動更新零件定價"
-#: common/setting/system.py:633
+#: common/setting/system.py:626
msgid "Pricing Rebuild Interval"
msgstr "價格重建間隔"
-#: common/setting/system.py:634
+#: common/setting/system.py:627
msgid "Number of days before part pricing is automatically updated"
msgstr "零件價格自動更新前的天數"
-#: common/setting/system.py:640
+#: common/setting/system.py:633
msgid "Internal Prices"
msgstr "內部價格"
-#: common/setting/system.py:641
+#: common/setting/system.py:634
msgid "Enable internal prices for parts"
msgstr "啓用內部零件價格"
-#: common/setting/system.py:646
+#: common/setting/system.py:639
msgid "Internal Price Override"
msgstr "覆蓋內部價格"
-#: common/setting/system.py:648
+#: common/setting/system.py:641
msgid "If available, internal prices override price range calculations"
msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算"
-#: common/setting/system.py:654
+#: common/setting/system.py:647
msgid "Allow BOM Zero Quantity"
-msgstr ""
+msgstr "允許 BOM 零數量"
-#: common/setting/system.py:656
+#: common/setting/system.py:649
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 ""
+msgstr "接受零件的 BOM 項目數量為零。允許使用設定數量來定義每次生產所需的數量,而與生產數量無關"
-#: common/setting/system.py:662
+#: common/setting/system.py:655
msgid "Enable label printing"
msgstr "啓用標籤打印功能"
-#: common/setting/system.py:663
+#: common/setting/system.py:656
msgid "Enable label printing from the web interface"
msgstr "啓用從網絡界面打印標籤"
-#: common/setting/system.py:668
+#: common/setting/system.py:661
msgid "Label Image DPI"
msgstr "標籤圖片 DPI"
-#: common/setting/system.py:670
+#: common/setting/system.py:663
msgid "DPI resolution when generating image files to supply to label printing plugins"
msgstr "生成圖像文件以供標籤打印插件使用時的 DPI 分辨率"
-#: common/setting/system.py:676
+#: common/setting/system.py:669
msgid "Enable Reports"
msgstr "啓用報告"
-#: common/setting/system.py:677
+#: common/setting/system.py:670
msgid "Enable generation of reports"
msgstr "啓用報告生成"
-#: common/setting/system.py:682
+#: common/setting/system.py:675
msgid "Debug Mode"
msgstr "調試模式"
-#: common/setting/system.py:683
+#: common/setting/system.py:676
msgid "Generate reports in debug mode (HTML output)"
msgstr "以調試模式生成報告(HTML 輸出)"
-#: common/setting/system.py:688
+#: common/setting/system.py:681
msgid "Log Report Errors"
msgstr "日誌錯誤報告"
-#: common/setting/system.py:689
+#: common/setting/system.py:682
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:687 plugin/builtin/labels/label_sheet.py:29
+#: report/models.py:386
msgid "Page Size"
msgstr "頁面大小"
-#: common/setting/system.py:695
+#: common/setting/system.py:688
msgid "Default page size for PDF reports"
msgstr "PDF 報告默認頁面大小"
-#: common/setting/system.py:700
+#: common/setting/system.py:693
msgid "Enforce Parameter Units"
msgstr "強制參數單位"
-#: common/setting/system.py:702
+#: common/setting/system.py:695
msgid "If units are provided, parameter values must match the specified units"
msgstr "如果提供了單位,參數值必須與指定的單位匹配"
-#: common/setting/system.py:708
+#: common/setting/system.py:701
msgid "Globally Unique Serials"
msgstr "全局唯一序列號"
-#: common/setting/system.py:709
+#: common/setting/system.py:702
msgid "Serial numbers for stock items must be globally unique"
msgstr "庫存項的序列號必須全局唯一"
-#: common/setting/system.py:714
+#: common/setting/system.py:707
msgid "Delete Depleted Stock"
msgstr "刪除已耗盡的庫存"
-#: common/setting/system.py:715
+#: common/setting/system.py:708
msgid "Determines default behavior when a stock item is depleted"
msgstr "設置庫存耗盡時的默認行為"
+#: common/setting/system.py:713
+msgid "Allow Edit Serial Number"
+msgstr ""
+
+#: common/setting/system.py:714
+msgid "Allow editing of serial number for stock items"
+msgstr ""
+
+#: common/setting/system.py:719
+msgid "Delete Serialized Stock"
+msgstr ""
+
#: common/setting/system.py:720
+msgid "Allow deletion of stock items which have a serial number"
+msgstr ""
+
+#: common/setting/system.py:725
msgid "Batch Code Template"
msgstr "批號模板"
-#: common/setting/system.py:721
+#: common/setting/system.py:726
msgid "Template for generating default batch codes for stock items"
msgstr "為庫存項生成默認批號的模板"
-#: common/setting/system.py:725
+#: common/setting/system.py:730
msgid "Stock Expiry"
msgstr "庫存過期"
-#: common/setting/system.py:726
+#: common/setting/system.py:731
msgid "Enable stock expiry functionality"
msgstr "啓用庫存過期功能"
-#: common/setting/system.py:731
+#: common/setting/system.py:736
msgid "Sell Expired Stock"
msgstr "銷售過期庫存"
-#: common/setting/system.py:732
+#: common/setting/system.py:737
msgid "Allow sale of expired stock"
msgstr "允許銷售過期庫存"
-#: common/setting/system.py:737
+#: common/setting/system.py:742
msgid "Stock Stale Time"
msgstr "庫存過期時間"
-#: common/setting/system.py:739
+#: common/setting/system.py:744
msgid "Number of days stock items are considered stale before expiring"
msgstr "庫存項在到期前被視為過期的天數"
-#: common/setting/system.py:746
+#: common/setting/system.py:751
msgid "Build Expired Stock"
msgstr "生產過期庫存"
-#: common/setting/system.py:747
+#: common/setting/system.py:752
msgid "Allow building with expired stock"
msgstr "允許用過期的庫存生產"
-#: common/setting/system.py:752
+#: common/setting/system.py:757
msgid "Stock Ownership Control"
msgstr "庫存所有權控制"
-#: common/setting/system.py:753
+#: common/setting/system.py:758
msgid "Enable ownership control over stock locations and items"
msgstr "啓用庫存地點和項目的所有權控制"
-#: common/setting/system.py:758
+#: common/setting/system.py:763
msgid "Stock Location Default Icon"
msgstr "庫存地點默認圖標"
-#: common/setting/system.py:759
+#: common/setting/system.py:764
msgid "Stock location default icon (empty means no icon)"
msgstr "庫存地點默認圖標 (空表示沒有圖標)"
-#: common/setting/system.py:764
+#: common/setting/system.py:769
msgid "Show Installed Stock Items"
msgstr "顯示已安裝的庫存項"
-#: common/setting/system.py:765
+#: common/setting/system.py:770
msgid "Display installed stock items in stock tables"
msgstr "在庫存表中顯示已安裝的庫存項"
-#: common/setting/system.py:770
+#: common/setting/system.py:775
msgid "Check BOM when installing items"
msgstr "在安裝項目時檢查物料清單"
-#: common/setting/system.py:772
+#: common/setting/system.py:777
msgid "Installed stock items must exist in the BOM for the parent part"
msgstr "已安裝的庫存項目必須存在於上級零件的物料清單中"
-#: common/setting/system.py:778
+#: common/setting/system.py:783
msgid "Allow Out of Stock Transfer"
msgstr "允許超出庫存轉移"
-#: common/setting/system.py:780
+#: common/setting/system.py:785
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:791
msgid "Build Order Reference Pattern"
msgstr "生產訂單參考模式"
-#: common/setting/system.py:787
+#: common/setting/system.py:792
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:797 common/setting/system.py:865
+#: common/setting/system.py:885 common/setting/system.py:935
+#: common/setting/system.py:957
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:798 common/setting/system.py:866
+#: common/setting/system.py:886 common/setting/system.py:936
+#: common/setting/system.py:958
msgid "A responsible owner must be assigned to each order"
msgstr "必須為每個訂單分配一個負責人"
-#: common/setting/system.py:798
+#: common/setting/system.py:803
msgid "Require Active Part"
msgstr "需要活動零件"
-#: common/setting/system.py:799
+#: common/setting/system.py:804
msgid "Prevent build order creation for inactive parts"
msgstr "防止為非活動零件創建生產訂單"
-#: common/setting/system.py:804
+#: common/setting/system.py:809
msgid "Require Locked Part"
msgstr "需要鎖定零件"
-#: common/setting/system.py:805
+#: common/setting/system.py:810
msgid "Prevent build order creation for unlocked parts"
msgstr "防止為未鎖定的零件創建生產訂單"
-#: common/setting/system.py:810
+#: common/setting/system.py:815
msgid "Require Valid BOM"
msgstr "需要有效的物料清單"
-#: common/setting/system.py:811
+#: common/setting/system.py:816
msgid "Prevent build order creation unless BOM has been validated"
msgstr "除非物料清單已驗證,否則禁止創建生產訂單"
-#: common/setting/system.py:816
+#: common/setting/system.py:821
msgid "Require Closed Child Orders"
msgstr "需要關閉子訂單"
-#: common/setting/system.py:818
+#: common/setting/system.py:823
msgid "Prevent build order completion until all child orders are closed"
msgstr "在所有子訂單關閉之前,阻止生產訂單的完成"
-#: common/setting/system.py:824
+#: common/setting/system.py:829
msgid "External Build Orders"
msgstr "外部生產工單"
-#: common/setting/system.py:825
+#: common/setting/system.py:830
msgid "Enable external build order functionality"
msgstr "啟用外部生產工單功能"
-#: common/setting/system.py:830
+#: common/setting/system.py:835
+msgid "Require External Build Orders"
+msgstr ""
+
+#: common/setting/system.py:837
+msgid "Require an external build order when ordering assembled parts from an external supplier"
+msgstr ""
+
+#: common/setting/system.py:843
msgid "Block Until Tests Pass"
msgstr "阻止直到測試通過"
-#: common/setting/system.py:832
+#: common/setting/system.py:845
msgid "Prevent build outputs from being completed until all required tests pass"
msgstr "在所有必要的測試通過之前,阻止產出完成"
-#: common/setting/system.py:838
+#: common/setting/system.py:851
msgid "Enable Return Orders"
msgstr "啓用訂單退貨"
-#: common/setting/system.py:839
+#: common/setting/system.py:852
msgid "Enable return order functionality in the user interface"
msgstr "在用户界面中啓用訂單退貨功能"
-#: common/setting/system.py:844
+#: common/setting/system.py:857
msgid "Return Order Reference Pattern"
msgstr "退貨訂單參考模式"
-#: common/setting/system.py:846
+#: common/setting/system.py:859
msgid "Required pattern for generating Return Order reference field"
msgstr "生成退貨訂單參考字段所需的模式"
-#: common/setting/system.py:858
+#: common/setting/system.py:871
msgid "Edit Completed Return Orders"
msgstr "編輯已完成的退貨訂單"
-#: common/setting/system.py:860
+#: common/setting/system.py:873
msgid "Allow editing of return orders after they have been completed"
msgstr "允許編輯已完成的退貨訂單"
-#: common/setting/system.py:866
+#: common/setting/system.py:879
msgid "Sales Order Reference Pattern"
msgstr "銷售訂單參考模式"
-#: common/setting/system.py:867
+#: common/setting/system.py:880
msgid "Required pattern for generating Sales Order reference field"
msgstr "生成銷售訂單參考字段所需參照模式"
-#: common/setting/system.py:878
+#: common/setting/system.py:891
msgid "Sales Order Default Shipment"
msgstr "銷售訂單默認配送方式"
-#: common/setting/system.py:879
+#: common/setting/system.py:892
msgid "Enable creation of default shipment with sales orders"
msgstr "啓用創建銷售訂單的默認配送功能"
-#: common/setting/system.py:884
+#: common/setting/system.py:897
msgid "Edit Completed Sales Orders"
msgstr "編輯已完成的銷售訂單"
-#: common/setting/system.py:886
+#: common/setting/system.py:899
msgid "Allow editing of sales orders after they have been shipped or completed"
msgstr "允許在訂單配送或完成後編輯銷售訂單"
-#: common/setting/system.py:892
+#: common/setting/system.py:905
msgid "Shipment Requires Checking"
-msgstr ""
+msgstr "發貨需要檢查"
-#: common/setting/system.py:894
+#: common/setting/system.py:907
msgid "Prevent completion of shipments until items have been checked"
-msgstr ""
+msgstr "在項目被檢查前,防止完成發貨"
-#: common/setting/system.py:900
+#: common/setting/system.py:913
msgid "Mark Shipped Orders as Complete"
msgstr "標記該訂單為已完成?"
-#: common/setting/system.py:902
+#: common/setting/system.py:915
msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status"
msgstr "標記為已發貨的銷售訂單將自動完成,繞過“已發貨”狀態"
-#: common/setting/system.py:908
+#: common/setting/system.py:921
+msgid "Enable Transfer Orders"
+msgstr ""
+
+#: common/setting/system.py:922
+msgid "Enable transfer order functionality in the user interface"
+msgstr ""
+
+#: common/setting/system.py:927
+msgid "Transfer Order Reference Pattern"
+msgstr ""
+
+#: common/setting/system.py:929
+msgid "Required pattern for generating Transfer Order reference field"
+msgstr ""
+
+#: common/setting/system.py:941
+msgid "Block Incomplete Item Tests"
+msgstr ""
+
+#: common/setting/system.py:943
+msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete"
+msgstr ""
+
+#: common/setting/system.py:949
msgid "Purchase Order Reference Pattern"
msgstr "採購訂單參考模式"
-#: common/setting/system.py:910
+#: common/setting/system.py:951
msgid "Required pattern for generating Purchase Order reference field"
msgstr "生成採購訂單參考字段所需的模式"
-#: common/setting/system.py:922
+#: common/setting/system.py:963
msgid "Edit Completed Purchase Orders"
msgstr "編輯已完成的採購訂單"
-#: common/setting/system.py:924
+#: common/setting/system.py:965
msgid "Allow editing of purchase orders after they have been shipped or completed"
msgstr "允許在採購訂單已配送或完成後編輯訂單"
-#: common/setting/system.py:930
+#: common/setting/system.py:971
msgid "Convert Currency"
msgstr "轉換幣別"
-#: common/setting/system.py:931
+#: common/setting/system.py:972
msgid "Convert item value to base currency when receiving stock"
msgstr "收貨時將項目價值換算為基準幣別"
-#: common/setting/system.py:936
+#: common/setting/system.py:977
msgid "Auto Complete Purchase Orders"
msgstr "自動完成採購訂單"
-#: common/setting/system.py:938
+#: common/setting/system.py:979
msgid "Automatically mark purchase orders as complete when all line items are received"
msgstr "當收到所有行項目時,自動將採購訂單標記為完成"
-#: common/setting/system.py:945
+#: common/setting/system.py:986
msgid "Enable password forgot"
msgstr "忘記啓用密碼"
-#: common/setting/system.py:946
+#: common/setting/system.py:987
msgid "Enable password forgot function on the login pages"
msgstr "在登錄頁面上啓用忘記密碼功能"
-#: common/setting/system.py:951
+#: common/setting/system.py:992
msgid "Enable registration"
msgstr "啓用註冊"
-#: common/setting/system.py:952
+#: common/setting/system.py:993
msgid "Enable self-registration for users on the login pages"
msgstr "在登錄頁面為用户啓用自行註冊功能"
-#: common/setting/system.py:957
+#: common/setting/system.py:998
msgid "Enable SSO"
msgstr "啓用單點登錄"
-#: common/setting/system.py:958
+#: common/setting/system.py:999
msgid "Enable SSO on the login pages"
msgstr "在登錄界面啓用單點登錄"
-#: common/setting/system.py:963
+#: common/setting/system.py:1004
msgid "Enable SSO registration"
msgstr "啓用單點登錄註冊"
-#: common/setting/system.py:965
+#: common/setting/system.py:1006
msgid "Enable self-registration via SSO for users on the login pages"
msgstr "允許登錄頁面上的用户通過 SSO 進行自我註冊"
-#: common/setting/system.py:971
+#: common/setting/system.py:1012
msgid "Enable SSO group sync"
msgstr "啓用單點登錄羣組同步"
-#: common/setting/system.py:973
+#: common/setting/system.py:1014
msgid "Enable synchronizing InvenTree groups with groups provided by the IdP"
msgstr "啓用庫存管理系統組和由身份提供者提供的組的同步功能"
-#: common/setting/system.py:979
+#: common/setting/system.py:1020
msgid "SSO group key"
msgstr "單點登錄系統組密鑰"
-#: common/setting/system.py:980
+#: common/setting/system.py:1021
msgid "The name of the groups claim attribute provided by the IdP"
msgstr "由身份提供者提供的組聲明屬性名稱"
-#: common/setting/system.py:985
+#: common/setting/system.py:1026
msgid "SSO group map"
msgstr "單點登錄系統組地圖"
-#: common/setting/system.py:987
+#: common/setting/system.py:1028
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:1034
msgid "Remove groups outside of SSO"
msgstr "移除單點登錄系統以外的羣組"
-#: common/setting/system.py:995
+#: common/setting/system.py:1036
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:1042
msgid "Email required"
msgstr "需要郵箱地址"
-#: common/setting/system.py:1002
+#: common/setting/system.py:1043
msgid "Require user to supply mail on signup"
msgstr "要求用户在註冊時提供郵件"
-#: common/setting/system.py:1007
+#: common/setting/system.py:1048
msgid "Auto-fill SSO users"
msgstr "自動填充單點登錄系統用户"
-#: common/setting/system.py:1008
+#: common/setting/system.py:1049
msgid "Automatically fill out user-details from SSO account-data"
msgstr "自動使用單點登錄系統賬户的數據填寫用户詳細信息"
-#: common/setting/system.py:1013
+#: common/setting/system.py:1054
msgid "Mail twice"
msgstr "發兩次郵件"
-#: common/setting/system.py:1014
+#: common/setting/system.py:1055
msgid "On signup ask users twice for their mail"
msgstr "註冊時詢問用户他們的電子郵件兩次"
-#: common/setting/system.py:1019
+#: common/setting/system.py:1060
msgid "Password twice"
msgstr "兩次輸入密碼"
-#: common/setting/system.py:1020
+#: common/setting/system.py:1061
msgid "On signup ask users twice for their password"
msgstr "當註冊時請用户輸入密碼兩次"
-#: common/setting/system.py:1025
+#: common/setting/system.py:1066
msgid "Allowed domains"
msgstr "域名白名單"
-#: common/setting/system.py:1027
+#: common/setting/system.py:1068
msgid "Restrict signup to certain domains (comma-separated, starting with @)"
msgstr "限制註冊到某些域名 (逗號分隔,以 @ 開頭)"
-#: common/setting/system.py:1033
+#: common/setting/system.py:1074
msgid "Group on signup"
msgstr "註冊羣組"
-#: common/setting/system.py:1035
+#: common/setting/system.py:1076
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:1082
msgid "Enforce MFA"
msgstr "強制啓用多因素安全認證"
-#: common/setting/system.py:1042
+#: common/setting/system.py:1083
msgid "Users must use multifactor security."
msgstr "用户必須使用多因素安全認證。"
-#: common/setting/system.py:1047
+#: common/setting/system.py:1088
msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately."
-msgstr ""
+msgstr "啟用此設定將要求所有使用者設定多因素驗證。所有工作階段將立即中斷連線。"
-#: common/setting/system.py:1052
+#: common/setting/system.py:1093
msgid "Check plugins on startup"
msgstr "啓動時檢查插件"
-#: common/setting/system.py:1054
+#: common/setting/system.py:1095
msgid "Check that all plugins are installed on startup - enable in container environments"
msgstr "啓動時檢查全部插件是否已安裝 - 在容器環境中啓用"
-#: common/setting/system.py:1061
+#: common/setting/system.py:1102
msgid "Check for plugin updates"
msgstr "檢查插件更新"
-#: common/setting/system.py:1062
+#: common/setting/system.py:1103
msgid "Enable periodic checks for updates to installed plugins"
msgstr "啓用定期檢查已安裝插件的更新"
-#: common/setting/system.py:1068
+#: common/setting/system.py:1109
msgid "Enable URL integration"
msgstr "啓用統一資源定位符集成"
-#: common/setting/system.py:1069
+#: common/setting/system.py:1110
msgid "Enable plugins to add URL routes"
msgstr "啓用插件以添加統一資源定位符路由"
-#: common/setting/system.py:1075
+#: common/setting/system.py:1116
msgid "Enable navigation integration"
msgstr "啓用導航集成"
-#: common/setting/system.py:1076
+#: common/setting/system.py:1117
msgid "Enable plugins to integrate into navigation"
msgstr "啓用插件以集成到導航中"
-#: common/setting/system.py:1082
+#: common/setting/system.py:1123
msgid "Enable app integration"
msgstr "啓用應用集成"
-#: common/setting/system.py:1083
+#: common/setting/system.py:1124
msgid "Enable plugins to add apps"
msgstr "啓用插件添加應用"
-#: common/setting/system.py:1089
+#: common/setting/system.py:1130
msgid "Enable schedule integration"
msgstr "啓用調度集成"
-#: common/setting/system.py:1090
+#: common/setting/system.py:1131
msgid "Enable plugins to run scheduled tasks"
msgstr "啓用插件來運行預定任務"
-#: common/setting/system.py:1096
+#: common/setting/system.py:1137
msgid "Enable event integration"
msgstr "啓用事件集成"
-#: common/setting/system.py:1097
+#: common/setting/system.py:1138
msgid "Enable plugins to respond to internal events"
msgstr "啓用插件響應內部事件"
-#: common/setting/system.py:1103
+#: common/setting/system.py:1144
msgid "Enable interface integration"
msgstr "啓用界面集成"
-#: common/setting/system.py:1104
+#: common/setting/system.py:1145
msgid "Enable plugins to integrate into the user interface"
msgstr "啓用插件集成到用户界面"
-#: common/setting/system.py:1110
+#: common/setting/system.py:1151
msgid "Enable mail integration"
msgstr "啟用郵件整合"
-#: common/setting/system.py:1111
+#: common/setting/system.py:1152
msgid "Enable plugins to process outgoing/incoming mails"
msgstr "允許模組處理寄出/接收郵件"
-#: common/setting/system.py:1117
+#: common/setting/system.py:1158
msgid "Enable project codes"
msgstr "啟用專案代碼"
-#: common/setting/system.py:1118
+#: common/setting/system.py:1159
msgid "Enable project codes for tracking projects"
msgstr "啟用專案代碼以追蹤專案"
-#: common/setting/system.py:1123
+#: common/setting/system.py:1164
msgid "Enable Stocktake"
-msgstr ""
+msgstr "啟用盤點"
-#: common/setting/system.py:1125
+#: common/setting/system.py:1166
msgid "Enable functionality for recording historical stock levels and value"
msgstr "啟用記錄庫存數量及價值歷史的功能"
-#: common/setting/system.py:1131
+#: common/setting/system.py:1172
msgid "Exclude External Locations"
msgstr "排除外部地點"
-#: common/setting/system.py:1133
+#: common/setting/system.py:1174
msgid "Exclude stock items in external locations from stocktake calculations"
-msgstr ""
+msgstr "從盤點計算中排除外部位置的庫存項目"
-#: common/setting/system.py:1139
+#: common/setting/system.py:1180
msgid "Automatic Stocktake Period"
msgstr "自動盤點週期"
-#: common/setting/system.py:1140
+#: common/setting/system.py:1181
msgid "Number of days between automatic stocktake recording"
-msgstr ""
+msgstr "自動記錄盤點的天數間隔"
-#: common/setting/system.py:1146
+#: common/setting/system.py:1187
msgid "Delete Old Stocktake Entries"
-msgstr ""
+msgstr "刪除舊的盤點項目"
-#: common/setting/system.py:1148
+#: common/setting/system.py:1189
msgid "Delete stocktake entries older than the specified number of days"
-msgstr ""
+msgstr "刪除超過指定天數的盤點項目"
-#: common/setting/system.py:1154
+#: common/setting/system.py:1195
msgid "Stocktake Deletion Interval"
-msgstr ""
+msgstr "盤點刪除間隔"
-#: common/setting/system.py:1156
+#: common/setting/system.py:1197
msgid "Stocktake entries will be deleted after specified number of days"
-msgstr ""
+msgstr "盤點項目將在指定天數後刪除"
-#: common/setting/system.py:1163
+#: common/setting/system.py:1204
msgid "Delete Old Stock Tracking Entries"
msgstr "刪除舊庫存的追蹤紀錄"
-#: common/setting/system.py:1165
+#: common/setting/system.py:1206
msgid "Delete stock tracking entries older than the specified number of days"
-msgstr ""
+msgstr "刪除超過指定天數的庫存追蹤項目"
-#: common/setting/system.py:1171
+#: common/setting/system.py:1212
msgid "Stock Tracking Deletion Interval"
-msgstr ""
+msgstr "庫存追蹤刪除間隔"
-#: common/setting/system.py:1173
+#: common/setting/system.py:1214
msgid "Stock tracking entries will be deleted after specified number of days"
-msgstr ""
+msgstr "庫存追蹤項目將在指定天數後刪除"
-#: common/setting/system.py:1180
+#: common/setting/system.py:1221
msgid "Display Users full names"
msgstr "顯示用户全名"
-#: common/setting/system.py:1181
+#: common/setting/system.py:1222
msgid "Display Users full names instead of usernames"
msgstr "顯示用户全名而不是用户名"
-#: common/setting/system.py:1186
+#: common/setting/system.py:1227
msgid "Display User Profiles"
msgstr "顯示使用者個人檔案"
-#: common/setting/system.py:1187
+#: common/setting/system.py:1228
msgid "Display Users Profiles on their profile page"
msgstr "在個人頁面顯示使用者檔案資訊"
-#: common/setting/system.py:1192
+#: common/setting/system.py:1233
+msgid "Week Starts On"
+msgstr ""
+
+#: common/setting/system.py:1234
+msgid "Starting day of the week, for display in calendar views"
+msgstr ""
+
+#: common/setting/system.py:1237
+msgid "Sunday"
+msgstr ""
+
+#: common/setting/system.py:1238
+msgid "Monday"
+msgstr ""
+
+#: common/setting/system.py:1239
+msgid "Tuesday"
+msgstr ""
+
+#: common/setting/system.py:1240
+msgid "Wednesday"
+msgstr ""
+
+#: common/setting/system.py:1241
+msgid "Thursday"
+msgstr ""
+
+#: common/setting/system.py:1242
+msgid "Friday"
+msgstr ""
+
+#: common/setting/system.py:1243
+msgid "Saturday"
+msgstr ""
+
+#: common/setting/system.py:1247
msgid "Enable Test Station Data"
msgstr "啓用測試站數據"
-#: common/setting/system.py:1193
+#: common/setting/system.py:1248
msgid "Enable test station data collection for test results"
msgstr "啓用測試站數據收集以獲取測試結果"
-#: common/setting/system.py:1198
+#: common/setting/system.py:1253
msgid "Enable Machine Ping"
msgstr "啟用設備 Ping"
-#: common/setting/system.py:1200
+#: common/setting/system.py:1255
msgid "Enable periodic ping task of registered machines to check their status"
-msgstr ""
+msgstr "啟用對已註冊機器的定期 ping 任務以檢查其狀態"
#: common/setting/user.py:23
msgid "Inline label display"
@@ -3673,11 +3791,11 @@ msgstr "在瀏覽器中顯示PDF報告,而不是作為文件下載"
#: common/setting/user.py:45
msgid "Barcode Scanner in Form Fields"
-msgstr ""
+msgstr "表單欄位中的條碼掃描器"
#: common/setting/user.py:46
msgid "Allow barcode scanner input in form fields"
-msgstr ""
+msgstr "允許在表單欄位中使用條碼掃描器輸入"
#: common/setting/user.py:51
msgid "Search Parts"
@@ -3928,55 +4046,80 @@ msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled
msgstr "停用:完整分類路徑以滑鼠懸停提示顯示。啟用:直接以文字顯示完整路徑。"
#: common/setting/user.py:255
+msgid "Show Subassemblies in BOM table"
+msgstr ""
+
+#: common/setting/user.py:256
+msgid "Enable display of subassemblies in the BOM table"
+msgstr ""
+
+#: common/setting/user.py:261
msgid "Receive error reports"
msgstr "接收錯誤報告"
-#: common/setting/user.py:256
+#: common/setting/user.py:262
msgid "Receive notifications for system errors"
msgstr "接收系統錯誤通知"
-#: common/setting/user.py:261
+#: common/setting/user.py:267
msgid "Last used printing machines"
msgstr "上次使用的打印設備"
-#: common/setting/user.py:262
+#: common/setting/user.py:268
msgid "Save the last used printing machines for a user"
msgstr "為用户保存上次使用的打印設備"
-#: common/validators.py:38
-msgid "All models"
+#: common/setting/user.py:272
+msgid "Display Items at Final Level"
msgstr ""
-#: common/validators.py:63
+#: 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:39
+msgid "All models"
+msgstr "所有模型"
+
+#: common/validators.py:64
msgid "No attachment model type provided"
msgstr "未提供附件型號"
-#: common/validators.py:69
+#: common/validators.py:70
msgid "Invalid attachment model type"
msgstr "附件模型類型無效"
-#: common/validators.py:110
+#: common/validators.py:86
+#, python-brace-format
+msgid "File size exceeds maximum upload limit of {max_size} MB"
+msgstr ""
+
+#: common/validators.py:92
+msgid "Invalid file name"
+msgstr ""
+
+#: common/validators.py:126
msgid "Minimum places cannot be greater than maximum places"
msgstr "最小位置不能大於最大位置"
-#: common/validators.py:122
+#: common/validators.py:138
msgid "Maximum places cannot be less than minimum places"
msgstr "最大名額不能小於最小名額"
-#: common/validators.py:133
+#: common/validators.py:149
msgid "An empty domain is not allowed."
msgstr "不允許空域。"
-#: common/validators.py:135
+#: common/validators.py:151
#, python-brace-format
msgid "Invalid domain name: {domain}"
msgstr "無效的域名: {domain}"
-#: common/validators.py:151
+#: common/validators.py:167
msgid "Value must be uppercase"
msgstr "值必須為大寫"
-#: common/validators.py:157
+#: common/validators.py:173
msgid "Value must be a valid variable identifier"
msgstr "值必須為有效的變數識別符"
@@ -3994,7 +4137,7 @@ msgstr "供應商零件處於激活狀態"
#: company/api.py:254
msgid "Primary Supplier Part"
-msgstr ""
+msgstr "主要供應商零件"
#: company/api.py:258
msgid "Internal Part is Active"
@@ -4004,13 +4147,13 @@ 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:510
msgid "Manufacturer"
msgstr "製造商"
#: company/api.py:282 company/models.py:124 company/models.py:404
-#: stock/api.py:899
+#: stock/api.py:908
msgid "Company"
msgstr "公司"
@@ -4050,8 +4193,8 @@ msgstr "聯繫電話"
msgid "Contact email address"
msgstr "聯繫人電子郵箱地址"
-#: company/models.py:181 company/models.py:311 order/models.py:525
-#: users/models.py:561
+#: company/models.py:181 company/models.py:311 order/models.py:564
+#: users/models.py:559
msgid "Contact"
msgstr "聯繫人"
@@ -4103,7 +4246,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:574 order/models.py:2410
msgid "Address"
msgstr "地址"
@@ -4195,12 +4338,12 @@ msgstr "內部使用的裝運通知單"
msgid "Link to address information (external)"
msgstr "鏈接地址信息 (外部)"
-#: company/models.py:507 company/models.py:802 company/serializers.py:501
-#: stock/api.py:560
+#: company/models.py:507 company/models.py:802 company/serializers.py:474
+#: stock/api.py:565
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:1057
#: stock/serializers.py:418
msgid "Base Part"
msgstr "基礎零件"
@@ -4213,12 +4356,12 @@ 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:744
+#: part/serializers.py:520
msgid "MPN"
msgstr "製造商零件編號"
-#: company/models.py:543 stock/serializers.py:578
+#: company/models.py:543 stock/serializers.py:580
msgid "Manufacturer Part Number"
msgstr "製造商零件編號"
@@ -4242,11 +4385,11 @@ 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:705 part/serializers.py:494
#: 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
+#: stock/api.py:571 templates/email/overdue_purchase_order.html:16
msgid "Supplier"
msgstr "供應商"
@@ -4254,7 +4397,7 @@ msgstr "供應商"
msgid "Select supplier"
msgstr "選擇供應商"
-#: company/models.py:781 part/serializers.py:486
+#: company/models.py:781 part/serializers.py:505
msgid "Supplier stock keeping unit"
msgstr "供應商庫存管理單位"
@@ -4264,11 +4407,11 @@ msgstr "此供應商零件是否處於活動狀態?"
#: company/models.py:792
msgid "Primary"
-msgstr ""
+msgstr "主要"
#: company/models.py:793
msgid "Is this the primary supplier part for the linked Part?"
-msgstr ""
+msgstr "這是關聯零件的主要供應商零件嗎?"
#: company/models.py:803
msgid "Select manufacturer part"
@@ -4282,16 +4425,16 @@ msgstr "外部供應商零件鏈接的URL"
msgid "Supplier part description"
msgstr "供應商零件説明"
-#: company/models.py:835 part/models.py:2295
+#: company/models.py:835 part/models.py:2355
msgid "base cost"
msgstr "基本費用"
-#: company/models.py:836 part/models.py:2296
+#: company/models.py:836 part/models.py:2356
msgid "Minimum charge (e.g. stocking fee)"
msgstr "最低費用(例如庫存費)"
-#: company/models.py:843 order/serializers.py:887 stock/models.py:1063
-#: stock/serializers.py:1681
+#: company/models.py:843 order/serializers.py:889 stock/models.py:1088
+#: stock/serializers.py:1708
msgid "Packaging"
msgstr "打包"
@@ -4307,7 +4450,7 @@ msgstr "包裝數量"
msgid "Total quantity supplied in a single pack. Leave empty for single items."
msgstr "單包供應的總數量。為單個項目留空。"
-#: company/models.py:870 part/models.py:2302
+#: company/models.py:870 part/models.py:2362
msgid "multiple"
msgstr "多個"
@@ -4331,25 +4474,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:881 stock/serializers.py:444
msgid "In Stock"
msgstr "有庫存"
-#: company/serializers.py:435
+#: company/serializers.py:408
msgid "Price Breaks"
-msgstr ""
+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"
@@ -4503,7 +4646,7 @@ msgstr "原始行數據"
msgid "Errors"
msgstr "錯誤"
-#: importer/models.py:585 part/serializers.py:1159
+#: importer/models.py:585 part/serializers.py:1175
msgid "Valid"
msgstr "有效"
@@ -4513,11 +4656,11 @@ msgstr "更新既有紀錄需要提供 ID。"
#: importer/models.py:853
msgid "No record found with the provided ID"
-msgstr ""
+msgstr "找不到提供 ID 的記錄"
#: importer/models.py:859
msgid "Invalid ID format provided"
-msgstr ""
+msgstr "提供的 ID 格式無效"
#: importer/operations.py:31 importer/operations.py:52
msgid "Unsupported data file format"
@@ -4615,7 +4758,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:2367
msgid "Unknown"
msgstr "未知"
@@ -4625,7 +4768,7 @@ msgstr "正在打印"
#: machine/machine_types/label_printer.py:234
msgid "Warning"
-msgstr ""
+msgstr "警告"
#: machine/machine_types/label_printer.py:235
msgid "No media"
@@ -4641,7 +4784,7 @@ msgstr "已斷開連接"
#: machine/machine_types/label_printer.py:238
msgid "Error"
-msgstr ""
+msgstr "錯誤"
#: machine/machine_types/label_printer.py:245
msgid "Label Printer"
@@ -4713,23 +4856,23 @@ msgstr "配置類型"
#: machine/serializers.py:24
msgid "Key of the property"
-msgstr ""
+msgstr "屬性鍵值"
#: machine/serializers.py:27
msgid "Value of the property"
-msgstr ""
+msgstr "屬性值"
-#: machine/serializers.py:30 users/models.py:238
+#: machine/serializers.py:30 users/models.py:236
msgid "Group"
msgstr "組"
#: machine/serializers.py:30
msgid "Grouping of the property"
-msgstr ""
+msgstr "屬性分組"
#: machine/serializers.py:33
msgid "Type"
-msgstr ""
+msgstr "類型"
#: machine/serializers.py:35
msgid "Type of the property"
@@ -4741,119 +4884,120 @@ msgstr "最大進度"
#: machine/serializers.py:41
msgid "Maximum value for progress type, required if type=progress"
-msgstr ""
+msgstr "進度類型的最大值,當 type=progress 時為必填"
-#: order/api.py:128
+#: order/api.py:132
msgid "Order Reference"
msgstr "訂單參考"
-#: order/api.py:156 order/api.py:1218
+#: order/api.py:160 order/api.py:1222 order/api.py:2004
msgid "Outstanding"
msgstr "未完成"
-#: order/api.py:172
+#: order/api.py:176
msgid "Has Project Code"
msgstr "有項目編碼"
-#: order/api.py:186 order/models.py:493
+#: order/api.py:190 order/models.py:532
msgid "Created By"
msgstr "創建人"
-#: order/api.py:190
+#: order/api.py:194
msgid "Created Before"
msgstr "建立時間早於"
-#: order/api.py:194
+#: order/api.py:198
msgid "Created After"
msgstr "建立時間晚於"
-#: order/api.py:198
+#: order/api.py:202
msgid "Has Start Date"
msgstr "具有開始日期"
-#: order/api.py:206
+#: order/api.py:210
msgid "Start Date Before"
msgstr "開始日期早於"
-#: order/api.py:210
+#: order/api.py:214
msgid "Start Date After"
msgstr "開始日期晚於"
-#: order/api.py:214
+#: order/api.py:218
msgid "Has Target Date"
msgstr "具有目標日期"
-#: order/api.py:222
+#: order/api.py:226
msgid "Target Date Before"
msgstr "目標日期早於"
-#: order/api.py:226
+#: order/api.py:230
msgid "Target Date After"
msgstr "目標日期晚於"
-#: order/api.py:230
+#: order/api.py:234
msgid "Updated Before"
msgstr "更新之前"
-#: order/api.py:234
+#: order/api.py:238
msgid "Updated After"
msgstr "更新之後"
-#: order/api.py:285
+#: order/api.py:289
msgid "Has Pricing"
msgstr "有定價"
-#: order/api.py:338 order/api.py:825 order/api.py:1527
+#: order/api.py:342 order/api.py:829 order/api.py:1531 order/api.py:1822
msgid "Completed Before"
msgstr "完成時間早於"
-#: order/api.py:342 order/api.py:829 order/api.py:1531
+#: order/api.py:346 order/api.py:833 order/api.py:1535 order/api.py:1826
msgid "Completed After"
msgstr "完成時間晚於"
-#: order/api.py:348 order/api.py:352
+#: order/api.py:352 order/api.py:356
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:541 order/api.py:929 order/api.py:1185 order/api.py:1967
+#: order/api.py:2126 order/models.py:2042 order/models.py:2168
+#: order/models.py:2220 order/models.py:2401 order/models.py:2597
+#: order/models.py:3126 order/models.py:3192 order/models.py:3600
msgid "Order"
msgstr "訂單"
-#: order/api.py:541 order/api.py:993
+#: order/api.py:545 order/api.py:997 order/api.py:2194
msgid "Order Complete"
msgstr "訂單完成"
-#: order/api.py:573 order/api.py:577 order/serializers.py:753
+#: order/api.py:577 order/api.py:581 order/serializers.py:755
msgid "Internal Part"
msgstr "內部零件"
-#: order/api.py:595
+#: order/api.py:599
msgid "Order Pending"
msgstr "訂單待定"
-#: order/api.py:978
+#: order/api.py:982 order/api.py:2179
msgid "Completed"
msgstr "已完成"
-#: order/api.py:1234
+#: order/api.py:1238
msgid "Has Shipment"
msgstr "已出貨"
-#: order/api.py:1442
+#: order/api.py:1446
msgid "Shipment not found"
-msgstr ""
+msgstr "找不到發貨紀錄"
-#: order/api.py:1840 order/models.py:577 order/models.py:1973
-#: order/models.py:2099
+#: order/api.py:2359 order/models.py:616 order/models.py:2043
+#: order/models.py:2169
#: 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:2361 order/models.py:1331 order/models.py:2221
+#: order/models.py:2402 order/models.py:2598
#: 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
@@ -4861,774 +5005,848 @@ msgstr "採購訂單"
msgid "Sales Order"
msgstr "銷售訂單"
-#: order/api.py:1844 order/models.py:2699 order/models.py:3057
-#: order/models.py:3123
+#: order/api.py:2363 order/models.py:2769 order/models.py:3127
+#: order/models.py:3193
#: report/templates/report/inventree_return_order_report.html:13
#: templates/email/overdue_return_order.html:15
msgid "Return Order"
msgstr "退貨訂單"
-#: order/models.py:90
+#: order/api.py:2365 order/models.py:3215 order/models.py:3601
+#: report/templates/report/inventree_transfer_order_report.html:12
+msgid "Transfer Order"
+msgstr ""
+
+#: order/models.py:97
#: report/templates/report/inventree_purchase_order_report.html:38
#: report/templates/report/inventree_sales_order_report.html:31
msgid "Total Price"
msgstr "總價格"
-#: order/models.py:91
+#: order/models.py:98
msgid "Total price for this order"
msgstr "此訂單的總價"
-#: order/models.py:96 order/serializers.py:61
+#: order/models.py:103 order/serializers.py:63
msgid "Order Currency"
msgstr "訂單貨幣"
-#: order/models.py:99 order/serializers.py:62
+#: order/models.py:106 order/serializers.py:64
msgid "Currency for this order (leave blank to use company default)"
msgstr "此訂單的貨幣 (留空以使用公司默認值)"
-#: order/models.py:326
+#: order/models.py:354
msgid "This order is locked and cannot be modified"
msgstr "此訂單已鎖定,無法修改"
-#: order/models.py:380
+#: order/models.py:413
msgid "Contact does not match selected company"
msgstr "聯繫人與所選公司不匹配"
-#: order/models.py:387
+#: order/models.py:420
msgid "Start date must be before target date"
msgstr "開始日期必須早於目標日期"
-#: order/models.py:394
+#: order/models.py:431
msgid "Address does not match selected company"
msgstr "地址不符合選定的公司"
-#: order/models.py:448
+#: order/models.py:487
msgid "Order description (optional)"
msgstr "訂單描述 (可選)"
-#: order/models.py:457 order/models.py:1854
+#: order/models.py:496 order/models.py:1910
msgid "Select project code for this order"
msgstr "為此訂單選擇項目編碼"
-#: order/models.py:463 order/models.py:1835 order/models.py:2396
+#: order/models.py:502 order/models.py:1891 order/models.py:2466
msgid "Link to external page"
msgstr "鏈接到外部頁面"
-#: order/models.py:470
+#: order/models.py:509
msgid "Start date"
msgstr "開始日期"
-#: order/models.py:471
+#: order/models.py:510
msgid "Scheduled start date for this order"
msgstr "此訂單的預定開始日期"
-#: order/models.py:477 order/models.py:1842 order/serializers.py:307
+#: order/models.py:516 order/models.py:1898 order/serializers.py:309
#: report/templates/report/inventree_build_order_report.html:125
msgid "Target Date"
msgstr "預計日期"
-#: order/models.py:479
+#: order/models.py:518
msgid "Expected date for order delivery. Order will be overdue after this date."
msgstr "訂單交付的預期日期。訂單將在此日期後過期。"
-#: order/models.py:499
+#: order/models.py:538
msgid "Issue Date"
msgstr "簽發日期"
-#: order/models.py:500
+#: order/models.py:539
msgid "Date order was issued"
msgstr "訂單發出日期"
-#: order/models.py:506
+#: order/models.py:545
msgid "Updated At"
msgstr "更新於"
-#: order/models.py:515
+#: order/models.py:554
msgid "User or group responsible for this order"
msgstr "負責此訂單的用户或組"
-#: order/models.py:526
+#: order/models.py:565
msgid "Point of contact for this order"
msgstr "此訂單的聯繫人"
-#: order/models.py:536
+#: order/models.py:575
msgid "Company address for this order"
msgstr "此訂單的公司地址"
-#: order/models.py:642 order/models.py:1351
+#: order/models.py:681 order/models.py:1394
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:690 order/models.py:1418 order/models.py:2859
+#: order/models.py:3292 stock/serializers.py:567 stock/serializers.py:1019
+#: users/models.py:540
msgid "Status"
msgstr "狀態"
-#: order/models.py:652
+#: order/models.py:691
msgid "Purchase order status"
msgstr "採購訂單狀態"
-#: order/models.py:667
+#: order/models.py:706
msgid "Company from which the items are being ordered"
msgstr "訂購物品的公司"
-#: order/models.py:678
+#: order/models.py:717
msgid "Supplier Reference"
msgstr "供應商參考"
-#: order/models.py:679
+#: order/models.py:718
msgid "Supplier order reference code"
msgstr "供應商訂單參考代碼"
-#: order/models.py:688
+#: order/models.py:727
msgid "received by"
msgstr "接收人"
-#: order/models.py:695 order/models.py:2804
+#: order/models.py:734 order/models.py:2874 order/models.py:3333
msgid "Date order was completed"
msgstr "訂單完成日期"
-#: order/models.py:704 order/models.py:2031
+#: order/models.py:743 order/models.py:2101
msgid "Destination"
msgstr "目的地"
-#: order/models.py:705 order/models.py:2035
+#: order/models.py:744 order/models.py:2105
msgid "Destination for received items"
msgstr "收到項目的存放目的地"
-#: order/models.py:751
+#: order/models.py:790
msgid "Part supplier must match PO supplier"
msgstr "零件供應商必須與採購訂單供應商匹配"
-#: order/models.py:1021
+#: order/models.py:1060
msgid "Line item does not match purchase order"
msgstr "行項目與採購訂單不匹配"
-#: order/models.py:1024
+#: order/models.py:1063
msgid "Line item is missing a linked part"
msgstr "行項目缺少關聯零件"
-#: order/models.py:1038
+#: order/models.py:1077
msgid "Quantity must be a positive number"
msgstr "數量必須是正數"
-#: order/models.py:1072
+#: order/models.py:1111
msgid "Serial numbers cannot be assigned to virtual parts"
-msgstr ""
+msgstr "序號無法分配給虛擬零件"
-#: order/models.py:1362 order/models.py:2776 stock/models.py:1085
-#: stock/models.py:1086 stock/serializers.py:1397
+#: order/models.py:1405 order/models.py:2846 stock/models.py:1110
+#: stock/models.py:1111 stock/serializers.py:1424
#: templates/email/overdue_return_order.html:16
#: templates/email/overdue_sales_order.html:16
msgid "Customer"
msgstr "客户"
-#: order/models.py:1363
+#: order/models.py:1406
msgid "Company to which the items are being sold"
msgstr "出售物品的公司"
-#: order/models.py:1376
+#: order/models.py:1419
msgid "Sales order status"
msgstr "銷售訂單狀態"
-#: order/models.py:1387 order/models.py:2796
+#: order/models.py:1430 order/models.py:2866
msgid "Customer Reference "
msgstr "客户參考 "
-#: order/models.py:1388 order/models.py:2797
+#: order/models.py:1431 order/models.py:2867
msgid "Customer order reference code"
msgstr "客户訂單參考代碼"
-#: order/models.py:1392 order/models.py:2348
+#: order/models.py:1435 order/models.py:2418
msgid "Shipment Date"
msgstr "發貨日期"
-#: order/models.py:1401
+#: order/models.py:1444
msgid "shipped by"
msgstr "發貨人"
-#: order/models.py:1452
+#: order/models.py:1495 order/models.py:3376
msgid "Order is already complete"
msgstr "訂單已完成"
-#: order/models.py:1455
+#: order/models.py:1498 order/models.py:3379
msgid "Order is already cancelled"
msgstr "訂單已取消"
-#: order/models.py:1459
+#: order/models.py:1502
msgid "Only an open order can be marked as complete"
msgstr "只有未結訂單才能標記為已完成"
-#: order/models.py:1463
+#: order/models.py:1506
msgid "Order cannot be completed as there are incomplete shipments"
msgstr "由於發貨不完整,訂單無法完成"
-#: order/models.py:1468
+#: order/models.py:1511
msgid "Order cannot be completed as there are incomplete allocations"
msgstr "訂單無法完成,因為仍有未完成的分配"
-#: order/models.py:1477
+#: order/models.py:1520
msgid "Order cannot be completed as there are incomplete line items"
msgstr "訂單無法完成,因為行項目不完整"
-#: order/models.py:1772 order/models.py:1788
+#: order/models.py:1817 order/models.py:1842
msgid "The order is locked and cannot be modified"
msgstr "此訂單已鎖定,無法修改"
-#: order/models.py:1796
+#: order/models.py:1850
msgid "Item quantity"
msgstr "項目數量"
-#: order/models.py:1814
+#: order/models.py:1868
msgid "Line Number"
-msgstr ""
+msgstr "行號"
-#: order/models.py:1815
+#: order/models.py:1869
msgid "Line number for this item (optional)"
-msgstr ""
+msgstr "此項目的行號 (選填)"
-#: order/models.py:1822
+#: order/models.py:1878
msgid "Line item reference"
msgstr "行項目參考"
-#: order/models.py:1829
+#: order/models.py:1885
msgid "Line item notes"
msgstr "行項目註釋"
-#: order/models.py:1844
+#: order/models.py:1900
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:1930
msgid "Line item description (optional)"
msgstr "行項目描述 (可選)"
-#: order/models.py:1881
+#: order/models.py:1937
msgid "Additional context for this line"
msgstr "此行的附加上下文"
-#: order/models.py:1891
+#: order/models.py:1947
msgid "Unit price"
msgstr "單位價格"
-#: order/models.py:1910
+#: order/models.py:1966
msgid "Purchase Order Line Item"
msgstr "採購訂單行項目"
-#: order/models.py:1939
+#: order/models.py:1995
msgid "Supplier part must match supplier"
msgstr "供應商零件必須與供應商匹配"
-#: order/models.py:1944
+#: order/models.py:2003
msgid "Build order must be marked as external"
msgstr "生產工單必須標記為外部"
-#: order/models.py:1951
+#: order/models.py:2010
msgid "Build orders can only be linked to assembly parts"
msgstr "生產工單只能連結到組裝零件"
-#: order/models.py:1957
+#: order/models.py:2016
msgid "Build order part must match line item part"
msgstr "生產工單的零件必須與行項目的零件一致"
-#: order/models.py:1992
+#: order/models.py:2026
+msgid "An external build order is required for assembly parts"
+msgstr ""
+
+#: order/models.py:2062
msgid "Supplier part"
msgstr "供應商零件"
-#: order/models.py:1999
+#: order/models.py:2069
msgid "Received"
msgstr "已接收"
-#: order/models.py:2000
+#: order/models.py:2070
msgid "Number of items received"
msgstr "收到的物品數量"
-#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666
+#: order/models.py:2078 stock/models.py:1233 stock/serializers.py:668
msgid "Purchase Price"
msgstr "採購價格"
-#: order/models.py:2009
+#: order/models.py:2079
msgid "Unit purchase price"
msgstr "每單位的採購價格"
-#: order/models.py:2025
+#: order/models.py:2095
msgid "External Build Order to be fulfilled by this line item"
msgstr "由此行項目履行的外部生產工單"
-#: order/models.py:2087
+#: order/models.py:2157
msgid "Purchase Order Extra Line"
msgstr "採購訂單附加行"
-#: order/models.py:2116
+#: order/models.py:2186
msgid "Sales Order Line Item"
msgstr "銷售訂單行項目"
-#: order/models.py:2143
+#: order/models.py:2213
msgid "Only salable parts can be assigned to a sales order"
msgstr "只有可銷售的零件才能分配給銷售訂單"
-#: order/models.py:2169
+#: order/models.py:2239
msgid "Sale Price"
msgstr "售出價格"
-#: order/models.py:2170
+#: order/models.py:2240
msgid "Unit sale price"
msgstr "單位售出價格"
-#: order/models.py:2179 order/status_codes.py:50
+#: order/models.py:2249 order/status_codes.py:50
msgid "Shipped"
msgstr "已配送"
-#: order/models.py:2180
+#: order/models.py:2250
msgid "Shipped quantity"
msgstr "發貨數量"
-#: order/models.py:2292
+#: order/models.py:2362
msgid "Sales Order Shipment"
msgstr "銷售訂單發貨"
-#: order/models.py:2305
+#: order/models.py:2375
msgid "Shipment address must match the customer"
msgstr "配送地址必須跟客戶相符"
-#: order/models.py:2341
+#: order/models.py:2411
msgid "Shipping address for this shipment"
msgstr "配送的採購地址"
-#: order/models.py:2349
+#: order/models.py:2419
msgid "Date of shipment"
msgstr "發貨日期"
-#: order/models.py:2355
+#: order/models.py:2425
msgid "Delivery Date"
msgstr "送達日期"
-#: order/models.py:2356
+#: order/models.py:2426
msgid "Date of delivery of shipment"
msgstr "裝運交貨日期"
-#: order/models.py:2364
+#: order/models.py:2434
msgid "Checked By"
msgstr "審核人"
-#: order/models.py:2365
+#: order/models.py:2435
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:2442 order/models.py:2694 order/serializers.py:1809
+#: order/serializers.py:1943
#: report/templates/report/inventree_sales_order_shipment_report.html:14
msgid "Shipment"
msgstr "配送"
-#: order/models.py:2373
+#: order/models.py:2443
msgid "Shipment number"
msgstr "配送單號"
-#: order/models.py:2381
+#: order/models.py:2451
msgid "Tracking Number"
msgstr "跟蹤單號"
-#: order/models.py:2382
+#: order/models.py:2452
msgid "Shipment tracking information"
msgstr "配送跟蹤信息"
-#: order/models.py:2389
+#: order/models.py:2459
msgid "Invoice Number"
msgstr "發票編號"
-#: order/models.py:2390
+#: order/models.py:2460
msgid "Reference number for associated invoice"
msgstr "相關發票的參考號"
-#: order/models.py:2436
+#: order/models.py:2506
msgid "Shipment has already been sent"
msgstr "貨物已發出"
-#: order/models.py:2439
+#: order/models.py:2509
msgid "Shipment has no allocated stock items"
msgstr "發貨沒有分配庫存項目"
-#: order/models.py:2446
-msgid "Shipment must be checked before it can be completed"
-msgstr ""
-
#: order/models.py:2516
+msgid "Shipment must be checked before it can be completed"
+msgstr "發貨紀錄必須在完成前進行檢查"
+
+#: order/models.py:2586
msgid "Sales Order Extra Line"
msgstr "銷售訂單加行"
-#: order/models.py:2545
+#: order/models.py:2615
msgid "Sales Order Allocation"
msgstr "銷售訂單分配"
-#: order/models.py:2568 order/models.py:2570
+#: order/models.py:2638 order/models.py:2640 order/models.py:3693
+#: order/models.py:3695
msgid "Stock item has not been assigned"
msgstr "庫存項目尚未分配"
-#: order/models.py:2577
+#: order/models.py:2647 order/models.py:3702
msgid "Cannot allocate stock item to a line with a different part"
msgstr "無法將庫存項目分配給具有不同零件的行"
-#: order/models.py:2580
+#: order/models.py:2650 order/models.py:3705
msgid "Cannot allocate stock to a line without a part"
msgstr "無法將庫存分配給沒有零件的生產線"
-#: order/models.py:2583
+#: order/models.py:2653 order/models.py:3708
msgid "Allocation quantity cannot exceed stock quantity"
msgstr "分配數量不能超過庫存數量"
-#: order/models.py:2599
+#: order/models.py:2669 order/models.py:3724
msgid "Allocation quantity must be greater than zero"
msgstr "分配的數量必須大於零"
-#: order/models.py:2602 order/serializers.py:1668
+#: order/models.py:2672 order/models.py:3727 order/serializers.py:1679
+#: order/serializers.py:2658
msgid "Quantity must be 1 for serialized stock item"
msgstr "序列化庫存項目的數量必須為1"
-#: order/models.py:2605
+#: order/models.py:2675
msgid "Sales order does not match shipment"
msgstr "銷售訂單與發貨不匹配"
-#: order/models.py:2606 plugin/base/barcodes/api.py:643
+#: order/models.py:2676 plugin/base/barcodes/api.py:643
msgid "Shipment does not match sales order"
msgstr "發貨與銷售訂單不匹配"
-#: order/models.py:2614
+#: order/models.py:2684 order/models.py:3735
msgid "Line"
msgstr "行"
-#: order/models.py:2625
+#: order/models.py:2695
msgid "Sales order shipment reference"
msgstr "銷售訂單發貨參考"
-#: order/models.py:2638 order/models.py:3064
+#: order/models.py:2708 order/models.py:3134 order/models.py:3748
msgid "Item"
msgstr "項目"
-#: order/models.py:2639
+#: order/models.py:2709 order/models.py:3749
msgid "Select stock item to allocate"
msgstr "選擇要分配的庫存項目"
-#: order/models.py:2648
+#: order/models.py:2718 order/models.py:3758
msgid "Enter stock allocation quantity"
msgstr "輸入庫存分配數量"
-#: order/models.py:2765
+#: order/models.py:2835
msgid "Return Order reference"
msgstr "退貨訂單參考"
-#: order/models.py:2777
+#: order/models.py:2847
msgid "Company from which items are being returned"
msgstr "退回物品的公司"
-#: order/models.py:2790
+#: order/models.py:2860
msgid "Return order status"
msgstr "退貨訂單狀態"
-#: order/models.py:3022
+#: order/models.py:3092
msgid "Return Order Line Item"
msgstr "退貨訂單行項目"
-#: order/models.py:3035
+#: order/models.py:3105
msgid "Stock item must be specified"
msgstr "必須指定庫存項目"
-#: order/models.py:3039
+#: order/models.py:3109
msgid "Return quantity exceeds stock quantity"
msgstr "退回數量超過庫存數量"
-#: order/models.py:3044
+#: order/models.py:3114
msgid "Return quantity must be greater than zero"
msgstr "退回數量必須大於零"
-#: order/models.py:3049
+#: order/models.py:3119
msgid "Invalid quantity for serialized stock item"
msgstr "序列化庫存項目的數量無效"
-#: order/models.py:3065
+#: order/models.py:3135
msgid "Select item to return from customer"
msgstr "選擇要從客户處退回的商品"
-#: order/models.py:3080
+#: order/models.py:3150
msgid "Received Date"
msgstr "接收日期"
-#: order/models.py:3081
+#: order/models.py:3151
msgid "The date this return item was received"
-msgstr ""
+msgstr "收到此退貨項目的日期"
-#: order/models.py:3093
+#: order/models.py:3163
msgid "Outcome"
msgstr "結果"
-#: order/models.py:3094
+#: order/models.py:3164
msgid "Outcome for this line item"
msgstr "該行項目的結果"
-#: order/models.py:3101
+#: order/models.py:3171
msgid "Cost associated with return or repair for this line item"
msgstr "與此行項目的退貨或維修相關的成本"
-#: order/models.py:3111
+#: order/models.py:3181
msgid "Return Order Extra Line"
msgstr "退貨訂單附加行"
-#: order/serializers.py:75
+#: order/models.py:3282
+msgid "Transfer Order Reference"
+msgstr ""
+
+#: order/models.py:3293
+msgid "Transfer order status"
+msgstr ""
+
+#: order/models.py:3308
+msgid "Source for transferred items"
+msgstr ""
+
+#: order/models.py:3318
+msgid "Destination for transferred items"
+msgstr ""
+
+#: order/models.py:3323
+msgid "Consume Stock"
+msgstr ""
+
+#: order/models.py:3325
+msgid "Rather than transfer the stock to the destination, \"consume\" it, by removing transferred quantity from the allocated stock item"
+msgstr ""
+
+#: order/models.py:3383
+msgid "Order cannot be completed until a destination location is set"
+msgstr ""
+
+#: order/models.py:3388
+msgid "Order cannot be completed until it is fully allocated"
+msgstr ""
+
+#: order/models.py:3582
+msgid "Transfer Order Line Item"
+msgstr ""
+
+#: order/models.py:3615
+msgid "transferred"
+msgstr ""
+
+#: order/models.py:3616
+msgid "transferred quantity"
+msgstr ""
+
+#: order/models.py:3670
+msgid "Transfer Order Allocation"
+msgstr ""
+
+#: order/serializers.py:77
msgid "Order ID"
msgstr "訂單ID"
-#: order/serializers.py:75
+#: order/serializers.py:77
msgid "ID of the order to duplicate"
msgstr "要複製的訂單ID"
-#: order/serializers.py:81
+#: order/serializers.py:83
msgid "Copy Lines"
msgstr "複製行"
-#: order/serializers.py:82
+#: order/serializers.py:84
msgid "Copy line items from the original order"
msgstr "從原始訂單複製行項目"
-#: order/serializers.py:88
+#: order/serializers.py:90
msgid "Copy Extra Lines"
msgstr "複製額外行"
-#: order/serializers.py:89
+#: order/serializers.py:91
msgid "Copy extra line items from the original order"
msgstr "從原始訂單複製額外的行項目"
-#: order/serializers.py:95 part/serializers.py:416
+#: order/serializers.py:97 part/serializers.py:435
msgid "Copy Parameters"
msgstr "複製參數"
-#: order/serializers.py:96
+#: order/serializers.py:98
msgid "Copy order parameters from the original order"
-msgstr ""
+msgstr "從原始訂單複製訂單參數"
-#: order/serializers.py:111
+#: order/serializers.py:113
#: 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
+#: report/templates/report/inventree_transfer_order_report.html:20
msgid "Line Items"
msgstr "行項目"
-#: order/serializers.py:116
+#: order/serializers.py:118
msgid "Completed Lines"
msgstr "已完成行項目"
-#: order/serializers.py:184
+#: order/serializers.py:186
msgid "Duplicate Order"
msgstr "複製訂單"
-#: order/serializers.py:185
+#: order/serializers.py:187
msgid "Specify options for duplicating this order"
msgstr "指定複製此訂單的選項"
-#: order/serializers.py:264
+#: order/serializers.py:266
msgid "Invalid order ID"
msgstr "訂單ID不正確"
-#: order/serializers.py:444
+#: order/serializers.py:446
msgid "Supplier Name"
msgstr "供應商名稱"
-#: order/serializers.py:493
+#: order/serializers.py:495 order/serializers.py:2407
msgid "Order cannot be cancelled"
msgstr "訂單不能取消"
-#: order/serializers.py:508 order/serializers.py:1689
+#: order/serializers.py:510 order/serializers.py:1700
msgid "Allow order to be closed with incomplete line items"
msgstr "允許關閉行項目不完整的訂單"
-#: order/serializers.py:518 order/serializers.py:1699
+#: order/serializers.py:520 order/serializers.py:1710
msgid "Order has incomplete line items"
msgstr "訂單中的行項目不完整"
-#: order/serializers.py:638
+#: order/serializers.py:640
msgid "Order is not open"
msgstr "訂單未打開"
-#: order/serializers.py:676
+#: order/serializers.py:678
msgid "Auto Pricing"
msgstr "自動定價"
-#: order/serializers.py:678
+#: order/serializers.py:680
msgid "Automatically calculate purchase price based on supplier part data"
msgstr "根據供應商零件數據自動計算採購價格"
-#: order/serializers.py:695
+#: order/serializers.py:697
msgid "Purchase price currency"
msgstr "購買價格貨幣"
-#: order/serializers.py:726
+#: order/serializers.py:728
msgid "Merge Items"
msgstr "合併項目"
-#: order/serializers.py:728
+#: order/serializers.py:730
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:737 part/serializers.py:504
msgid "SKU"
msgstr "庫存量單位"
-#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344
+#: order/serializers.py:751 part/models.py:1152 part/serializers.py:363
msgid "Internal Part Number"
msgstr "內部零件編號"
-#: order/serializers.py:757
+#: order/serializers.py:759
msgid "Internal Part Name"
msgstr "內部零件名稱"
-#: order/serializers.py:773
+#: order/serializers.py:775
msgid "Supplier part must be specified"
msgstr "必須指定供應商零件"
-#: order/serializers.py:776
+#: order/serializers.py:778
msgid "Purchase order must be specified"
msgstr "必須指定採購訂單"
-#: order/serializers.py:784
+#: order/serializers.py:786
msgid "Supplier must match purchase order"
msgstr "供應商必須匹配採購訂單"
-#: order/serializers.py:785
+#: order/serializers.py:787
msgid "Purchase order must match supplier"
msgstr "採購訂單必須與供應商匹配"
-#: order/serializers.py:837 order/serializers.py:1769
+#: order/serializers.py:839 order/serializers.py:1780 order/serializers.py:2810
msgid "Line Item"
msgstr "行項目"
-#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140
+#: order/serializers.py:848 order/serializers.py:988 order/serializers.py:2161
msgid "Select destination location for received items"
msgstr "為收到的物品選擇目的地位置"
-#: order/serializers.py:862
+#: order/serializers.py:864
msgid "Enter batch code for incoming stock items"
msgstr "輸入入庫項目的批號"
-#: order/serializers.py:869 stock/models.py:1167
+#: order/serializers.py:871 stock/models.py:1192
#: templates/email/stale_stock_notification.html:22 users/models.py:137
msgid "Expiry Date"
msgstr "有效期至"
-#: order/serializers.py:870
+#: order/serializers.py:872
msgid "Enter expiry date for incoming stock items"
msgstr "輸入入庫庫存項目的到期日"
-#: order/serializers.py:878
+#: order/serializers.py:880
msgid "Enter serial numbers for incoming stock items"
msgstr "輸入入庫庫存項目的序列號"
-#: order/serializers.py:888
+#: order/serializers.py:890
msgid "Override packaging information for incoming stock items"
msgstr "覆蓋傳入庫存項目的包裝資料"
-#: order/serializers.py:896 order/serializers.py:2145
+#: order/serializers.py:898 order/serializers.py:2166
msgid "Additional note for incoming stock items"
msgstr "傳入庫存項目的附加説明"
-#: order/serializers.py:903
+#: order/serializers.py:905
msgid "Barcode"
msgstr "條形碼"
-#: order/serializers.py:904
+#: order/serializers.py:906
msgid "Scanned barcode"
msgstr "掃描條形碼"
-#: order/serializers.py:920
+#: order/serializers.py:922
msgid "Barcode is already in use"
msgstr "條形碼已被使用"
-#: order/serializers.py:1003 order/serializers.py:2164
+#: order/serializers.py:1005 order/serializers.py:2185
msgid "Line items must be provided"
msgstr "必須提供行項目"
-#: order/serializers.py:1022
+#: order/serializers.py:1024
msgid "Destination location must be specified"
msgstr "必須指定目標位置"
-#: order/serializers.py:1029
+#: order/serializers.py:1031
msgid "Supplied barcode values must be unique"
msgstr "提供的條形碼值必須是唯一的"
-#: order/serializers.py:1154
+#: order/serializers.py:1156
msgid "Shipments"
msgstr "配送紀錄"
-#: order/serializers.py:1158
+#: order/serializers.py:1160
msgid "Completed Shipments"
msgstr "完成配送"
-#: order/serializers.py:1162
+#: order/serializers.py:1164
msgid "Allocated Lines"
-msgstr ""
+msgstr "已分配行"
-#: order/serializers.py:1355
+#: order/serializers.py:1357
msgid "Sale price currency"
msgstr "售出價格貨幣"
-#: order/serializers.py:1402
+#: order/serializers.py:1404
msgid "Allocated Items"
msgstr "已分配項目"
-#: order/serializers.py:1600
+#: order/serializers.py:1602
msgid "No shipment details provided"
msgstr "未提供裝運詳細信息"
-#: order/serializers.py:1632 order/serializers.py:1778
+#: order/serializers.py:1634 order/serializers.py:1789
+#: order/serializers.py:2622 order/serializers.py:2819
msgid "Line item is not associated with this order"
msgstr "行項目與此訂單不關聯"
-#: order/serializers.py:1651
+#: order/serializers.py:1653 order/serializers.py:2641
msgid "Quantity must be positive"
msgstr "數量必須為正"
-#: order/serializers.py:1788
+#: order/serializers.py:1674
+msgid "Stock item has not passed all required tests"
+msgstr ""
+
+#: order/serializers.py:1799 order/serializers.py:2829
msgid "Enter serial numbers to allocate"
msgstr "輸入要分配的序列號"
-#: order/serializers.py:1810 order/serializers.py:1930
+#: order/serializers.py:1821 order/serializers.py:1951
msgid "Shipment has already been shipped"
msgstr "貨物已發出"
-#: order/serializers.py:1813 order/serializers.py:1933
+#: order/serializers.py:1824 order/serializers.py:1954
msgid "Shipment is not associated with this order"
msgstr "發貨與此訂單無關"
-#: order/serializers.py:1868
+#: order/serializers.py:1887 order/serializers.py:2885
msgid "No match found for the following serial numbers"
msgstr "未找到以下序列號的匹配項"
-#: order/serializers.py:1875
+#: order/serializers.py:1894 order/serializers.py:2892
msgid "The following serial numbers are unavailable"
msgstr "以下序列號不可用"
-#: order/serializers.py:2106
+#: order/serializers.py:2127
msgid "Return order line item"
msgstr "退貨訂單行項目"
-#: order/serializers.py:2116
+#: order/serializers.py:2137
msgid "Line item does not match return order"
msgstr "行項目與退貨訂單不匹配"
-#: order/serializers.py:2119
+#: order/serializers.py:2140
msgid "Line item has already been received"
msgstr "行項目已收到"
-#: order/serializers.py:2156
+#: order/serializers.py:2177
msgid "Items can only be received against orders which are in progress"
msgstr "只能根據正在進行的訂單接收物品"
-#: order/serializers.py:2232
+#: order/serializers.py:2253
msgid "Quantity to return"
msgstr "退回數量"
-#: order/serializers.py:2257
+#: order/serializers.py:2278
msgid "Line price currency"
msgstr "行價格貨幣"
+#: order/serializers.py:2422
+msgid "Allow order to complete with incomplete allocations"
+msgstr ""
+
+#: order/serializers.py:2432
+msgid "Order has incomplete allocations"
+msgstr ""
+
#: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16
msgid "Lost"
msgstr "丟失"
@@ -5661,6 +5879,11 @@ msgstr "退款"
msgid "Reject"
msgstr "拒絕"
+#: order/status_codes.py:125
+#: report/templates/report/inventree_build_order_report.html:121
+msgid "Issued"
+msgstr "已派發"
+
#: order/tasks.py:48
msgid "Overdue Purchase Order"
msgstr "逾期採購訂單"
@@ -5696,7 +5919,7 @@ msgstr "已加星標"
msgid "Filter by starred categories"
msgstr "按星標類別篩選"
-#: part/api.py:107 stock/api.py:287
+#: part/api.py:107 stock/api.py:288
msgid "Depth"
msgstr "深度"
@@ -5704,7 +5927,7 @@ msgstr "深度"
msgid "Filter by category depth"
msgstr "按類別深度篩選"
-#: part/api.py:125 stock/api.py:305
+#: part/api.py:125 stock/api.py:306
msgid "Top Level"
msgstr "頂級"
@@ -5712,7 +5935,7 @@ msgstr "頂級"
msgid "Filter by top-level categories"
msgstr "按頂級類別篩選"
-#: part/api.py:140 stock/api.py:320
+#: part/api.py:140 stock/api.py:321
msgid "Cascade"
msgstr "級聯"
@@ -5732,75 +5955,79 @@ msgstr "按父類別篩選"
msgid "Exclude sub-categories under the specified category"
msgstr "排除指定類別下的子類別"
-#: part/api.py:424
+#: part/api.py:427
msgid "Has Results"
msgstr "有結果"
-#: part/api.py:653
+#: part/api.py:657
msgid "Is Variant"
msgstr "為變體"
-#: part/api.py:661
+#: part/api.py:665
msgid "Is Revision"
msgstr "是修訂版本"
-#: part/api.py:671
+#: part/api.py:675
msgid "Has Revisions"
msgstr "有修訂版本"
-#: part/api.py:852
+#: part/api.py:873
msgid "BOM Valid"
msgstr "物料清單合規"
-#: part/api.py:961
+#: part/api.py:982
msgid "Cascade Categories"
-msgstr ""
+msgstr "級聯類別"
-#: part/api.py:962
+#: part/api.py:983
msgid "If true, include items in child categories of the given category"
-msgstr ""
+msgstr "若為 true,則包含給定類別的子類別中的項目"
-#: part/api.py:968
+#: part/api.py:989
msgid "Filter by numeric category ID or the literal 'null'"
-msgstr ""
+msgstr "依數字類別 ID 或常值 'null' 篩選"
-#: part/api.py:1280
+#: part/api.py:1302
msgid "Assembly part is active"
-msgstr ""
+msgstr "組件零件處於作用中狀態"
-#: part/api.py:1284
+#: part/api.py:1306
msgid "Assembly part is trackable"
-msgstr ""
+msgstr "組件零件可追蹤"
-#: part/api.py:1288
+#: part/api.py:1310
msgid "Assembly part is testable"
msgstr "裝配部份是可測試的"
-#: part/api.py:1293
+#: part/api.py:1314
+msgid "Assembly part is locked"
+msgstr ""
+
+#: part/api.py:1319
msgid "Component part is active"
-msgstr ""
+msgstr "子零件處於作用中狀態"
-#: part/api.py:1297
+#: part/api.py:1323
msgid "Component part is trackable"
-msgstr ""
+msgstr "子零件可追蹤"
-#: part/api.py:1301
+#: part/api.py:1327
msgid "Component part is testable"
msgstr "組件部份是可測試的"
-#: part/api.py:1305
+#: part/api.py:1331
msgid "Component part is an assembly"
-msgstr ""
+msgstr "子零件是一個組件"
-#: part/api.py:1309
+#: part/api.py:1335
msgid "Component part is virtual"
-msgstr ""
+msgstr "子零件是虛擬的"
-#: part/api.py:1313
+#: part/api.py:1339
msgid "Has available stock"
-msgstr ""
+msgstr "有可用庫存"
-#: part/api.py:1370
+#: part/api.py:1396
msgid "Uses"
msgstr "使用"
@@ -5809,11 +6036,11 @@ msgstr "使用"
msgid "Part Category"
msgstr "零件類別"
-#: part/models.py:93 users/ruleset.py:27
+#: part/models.py:93 users/ruleset.py:29
msgid "Part Categories"
msgstr "零件類別"
-#: part/models.py:111 part/models.py:1187
+#: part/models.py:111 part/models.py:1188
msgid "Default Location"
msgstr "默認位置"
@@ -5821,7 +6048,7 @@ msgstr "默認位置"
msgid "Default location for parts in this category"
msgstr "此類別零件的默認庫存地點"
-#: part/models.py:117 stock/models.py:204
+#: part/models.py:117 stock/models.py:205
msgid "Structural"
msgstr "結構性"
@@ -5837,12 +6064,12 @@ msgstr "默認關鍵字"
msgid "Default keywords for parts in this category"
msgstr "此類別零件的默認關鍵字"
-#: part/models.py:136 stock/models.py:99 stock/models.py:186
+#: part/models.py:136 stock/models.py:100 stock/models.py:187
msgid "Icon"
msgstr "圖標"
-#: part/models.py:137 part/serializers.py:154 part/serializers.py:173
-#: stock/models.py:187
+#: part/models.py:137 part/serializers.py:173 part/serializers.py:192
+#: stock/models.py:188
msgid "Icon (optional)"
msgstr "圖標(可選)"
@@ -5862,984 +6089,1028 @@ msgstr "默認值"
msgid "Default Parameter Value"
msgstr "默認參數值"
-#: part/models.py:528 part/serializers.py:114 users/ruleset.py:28
+#: part/models.py:529 part/serializers.py:133 users/ruleset.py:30
msgid "Parts"
msgstr "零件"
-#: part/models.py:574
+#: part/models.py:575
msgid "Cannot delete parameters of a locked part"
-msgstr ""
+msgstr "無法刪除已鎖定零件的參數"
-#: part/models.py:579
+#: part/models.py:580
msgid "Cannot modify parameters of a locked part"
-msgstr ""
+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 ""
+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:855
#: 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:925
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:929
+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:2303
+#: part/models.py:2363
msgid "Sell multiple"
msgstr "出售多個"
-#: part/models.py:3308
+#: part/models.py:3372
msgid "Currency used to cache pricing calculations"
msgstr "用於緩存定價計算的貨幣"
-#: part/models.py:3324
+#: part/models.py:3388
msgid "Minimum BOM Cost"
msgstr "最低物料清單成本"
-#: part/models.py:3325
+#: part/models.py:3389
msgid "Minimum cost of component parts"
msgstr "元件的最低成本"
-#: part/models.py:3331
+#: part/models.py:3395
msgid "Maximum BOM Cost"
msgstr "物料清單的最高成本"
-#: part/models.py:3332
+#: part/models.py:3396
msgid "Maximum cost of component parts"
msgstr "元件的最高成本"
-#: part/models.py:3338
+#: part/models.py:3402
msgid "Minimum Purchase Cost"
msgstr "最低購買成本"
-#: part/models.py:3339
+#: part/models.py:3403
msgid "Minimum historical purchase cost"
msgstr "最高歷史購買成本"
-#: part/models.py:3345
+#: part/models.py:3409
msgid "Maximum Purchase Cost"
msgstr "最大購買成本"
-#: part/models.py:3346
+#: part/models.py:3410
msgid "Maximum historical purchase cost"
msgstr "最高歷史購買成本"
-#: part/models.py:3352
+#: part/models.py:3416
msgid "Minimum Internal Price"
msgstr "最低內部價格"
-#: part/models.py:3353
+#: part/models.py:3417
msgid "Minimum cost based on internal price breaks"
msgstr "基於內部批發價的最低成本"
-#: part/models.py:3359
+#: part/models.py:3423
msgid "Maximum Internal Price"
msgstr "最大內部價格"
-#: part/models.py:3360
+#: part/models.py:3424
msgid "Maximum cost based on internal price breaks"
msgstr "基於內部批發價的最高成本"
-#: part/models.py:3366
+#: part/models.py:3430
msgid "Minimum Supplier Price"
msgstr "供應商最低價格"
-#: part/models.py:3367
+#: part/models.py:3431
msgid "Minimum price of part from external suppliers"
msgstr "外部供應商零件的最低價格"
-#: part/models.py:3373
+#: part/models.py:3437
msgid "Maximum Supplier Price"
msgstr "供應商最高價格"
-#: part/models.py:3374
+#: part/models.py:3438
msgid "Maximum price of part from external suppliers"
msgstr "來自外部供應商的商零件的最高價格"
-#: part/models.py:3380
+#: part/models.py:3444
msgid "Minimum Variant Cost"
msgstr "最小變體成本"
-#: part/models.py:3381
+#: part/models.py:3445
msgid "Calculated minimum cost of variant parts"
msgstr "計算出的變體零件的最低成本"
-#: part/models.py:3387
+#: part/models.py:3451
msgid "Maximum Variant Cost"
msgstr "最大變體成本"
-#: part/models.py:3388
+#: part/models.py:3452
msgid "Calculated maximum cost of variant parts"
msgstr "計算出的變體零件的最大成本"
-#: part/models.py:3394 part/models.py:3408
+#: part/models.py:3458 part/models.py:3472
msgid "Minimum Cost"
msgstr "最低成本"
-#: part/models.py:3395
+#: part/models.py:3459
msgid "Override minimum cost"
msgstr "覆蓋最低成本"
-#: part/models.py:3401 part/models.py:3415
+#: part/models.py:3465 part/models.py:3479
msgid "Maximum Cost"
msgstr "最高成本"
-#: part/models.py:3402
+#: part/models.py:3466
msgid "Override maximum cost"
msgstr "覆蓋最大成本"
-#: part/models.py:3409
+#: part/models.py:3473
msgid "Calculated overall minimum cost"
msgstr "計算總最低成本"
-#: part/models.py:3416
+#: part/models.py:3480
msgid "Calculated overall maximum cost"
msgstr "計算總最大成本"
-#: part/models.py:3422
+#: part/models.py:3486
msgid "Minimum Sale Price"
msgstr "最低售出價格"
-#: part/models.py:3423
+#: part/models.py:3487
msgid "Minimum sale price based on price breaks"
msgstr "基於批發價的最低售出價格"
-#: part/models.py:3429
+#: part/models.py:3493
msgid "Maximum Sale Price"
msgstr "最高售出價格"
-#: part/models.py:3430
+#: part/models.py:3494
msgid "Maximum sale price based on price breaks"
msgstr "基於批發價的最大售出價格"
-#: part/models.py:3436
+#: part/models.py:3500
msgid "Minimum Sale Cost"
msgstr "最低銷售成本"
-#: part/models.py:3437
+#: part/models.py:3501
msgid "Minimum historical sale price"
msgstr "歷史最低售出價格"
-#: part/models.py:3443
+#: part/models.py:3507
msgid "Maximum Sale Cost"
msgstr "最高銷售成本"
-#: part/models.py:3444
+#: part/models.py:3508
msgid "Maximum historical sale price"
msgstr "歷史最高售出價格"
-#: part/models.py:3462
+#: part/models.py:3526
msgid "Part for stocktake"
msgstr "用於盤點的零件"
-#: part/models.py:3467
+#: part/models.py:3531
msgid "Item Count"
msgstr "物品數量"
-#: part/models.py:3468
+#: part/models.py:3532
msgid "Number of individual stock entries at time of stocktake"
msgstr "盤點時的個別庫存條目數"
-#: part/models.py:3476
+#: part/models.py:3540
msgid "Total available stock at time of stocktake"
msgstr "盤點時可用庫存總額"
-#: part/models.py:3480 report/templates/report/inventree_test_report.html:106
-#: stock/models.py:3105
+#: part/models.py:3544 report/templates/report/inventree_test_report.html:106
+#: stock/models.py:3178
msgid "Date"
msgstr "日期"
-#: part/models.py:3481
+#: part/models.py:3545
msgid "Date stocktake was performed"
msgstr "進行盤點的日期"
-#: part/models.py:3488
+#: part/models.py:3552
msgid "Minimum Stock Cost"
msgstr "最低庫存成本"
-#: part/models.py:3489
+#: part/models.py:3553
msgid "Estimated minimum cost of stock on hand"
msgstr "現有存庫存最低成本估算"
-#: part/models.py:3495
+#: part/models.py:3559
msgid "Maximum Stock Cost"
msgstr "最高庫存成本"
-#: part/models.py:3496
+#: part/models.py:3560
msgid "Estimated maximum cost of stock on hand"
msgstr "目前庫存最高成本估算"
-#: part/models.py:3506
+#: part/models.py:3570
msgid "Part Sale Price Break"
msgstr "零件售出價格折扣"
-#: part/models.py:3620
+#: part/models.py:3684
msgid "Part Test Template"
msgstr "零件測試模板"
-#: part/models.py:3646
+#: part/models.py:3710
msgid "Invalid template name - must include at least one alphanumeric character"
msgstr "模板名稱無效 - 必須包含至少一個字母或者數字"
-#: part/models.py:3678
+#: part/models.py:3742
msgid "Test templates can only be created for testable parts"
msgstr "測試模板只能為可拆分的部件創建"
-#: part/models.py:3692
+#: part/models.py:3756
msgid "Test template with the same key already exists for part"
msgstr "零件已存在具有相同主鍵的測試模板"
-#: part/models.py:3709
+#: part/models.py:3773
msgid "Test Name"
msgstr "測試名"
-#: part/models.py:3710
+#: part/models.py:3774
msgid "Enter a name for the test"
msgstr "輸入測試的名稱"
-#: part/models.py:3716
+#: part/models.py:3780
msgid "Test Key"
msgstr "測試主鍵"
-#: part/models.py:3717
+#: part/models.py:3781
msgid "Simplified key for the test"
msgstr "簡化測試主鍵"
-#: part/models.py:3724
+#: part/models.py:3788
msgid "Test Description"
msgstr "測試説明"
-#: part/models.py:3725
+#: part/models.py:3789
msgid "Enter description for this test"
msgstr "輸入測試的描述"
-#: part/models.py:3729
+#: part/models.py:3793
msgid "Is this test enabled?"
msgstr "此測試是否已啓用?"
-#: part/models.py:3734
+#: part/models.py:3798
msgid "Required"
msgstr "必須的"
-#: part/models.py:3735
+#: part/models.py:3799
msgid "Is this test required to pass?"
msgstr "需要此測試才能通過嗎?"
-#: part/models.py:3740
+#: part/models.py:3804
msgid "Requires Value"
msgstr "需要值"
-#: part/models.py:3741
+#: part/models.py:3805
msgid "Does this test require a value when adding a test result?"
msgstr "添加測試結果時是否需要一個值?"
-#: part/models.py:3746
+#: part/models.py:3810
msgid "Requires Attachment"
msgstr "需要附件"
-#: part/models.py:3748
+#: part/models.py:3812
msgid "Does this test require a file attachment when adding a test result?"
msgstr "添加測試結果時是否需要文件附件?"
-#: part/models.py:3755
+#: part/models.py:3819
msgid "Valid choices for this test (comma-separated)"
msgstr "此測試的有效選擇 (逗號分隔)"
-#: part/models.py:3949
+#: part/models.py:3963
+msgid "Invalid quantity - no units specified for part"
+msgstr ""
+
+#: part/models.py:3972
+msgid "Quantity must be greater than or equal to zero"
+msgstr "數量必須大於或等於零"
+
+#: part/models.py:4073
msgid "BOM item cannot be modified - assembly is locked"
msgstr "物料清單項目不能被修改 - 裝配已鎖定"
-#: part/models.py:3956
+#: part/models.py:4080
msgid "BOM item cannot be modified - variant assembly is locked"
msgstr "物料清單項目不能修改 - 變體裝配已鎖定"
-#: part/models.py:3966
+#: part/models.py:4090
msgid "Select parent part"
msgstr "選擇父零件"
-#: part/models.py:3976
+#: part/models.py:4100
msgid "Sub part"
msgstr "子零件"
-#: part/models.py:3977
+#: part/models.py:4101
msgid "Select part to be used in BOM"
msgstr "選擇要用於物料清單的零件"
-#: part/models.py:3988
+#: part/models.py:4107 part/serializers.py:1715
+msgid "Amount"
+msgstr ""
+
+#: part/models.py:4108
+msgid "Amount of sub-part consumed to produce one part"
+msgstr ""
+
+#: part/models.py:4120
msgid "BOM quantity for this BOM item"
msgstr "此物料清單項目的數量"
-#: part/models.py:3994
+#: part/models.py:4126
msgid "This BOM item is optional"
msgstr "此物料清單項目是可選的"
-#: part/models.py:4000
+#: part/models.py:4132
msgid "This BOM item is consumable (it is not tracked in build orders)"
msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)"
-#: part/models.py:4008
+#: part/models.py:4140
msgid "Setup Quantity"
msgstr "建置額外數量"
-#: part/models.py:4009
+#: part/models.py:4141
msgid "Extra required quantity for a build, to account for setup losses"
msgstr "為彌補建置 / 開工損耗所需的額外數量"
-#: part/models.py:4017
+#: part/models.py:4149
msgid "Attrition"
msgstr "損耗率"
-#: part/models.py:4019
+#: part/models.py:4151
msgid "Estimated attrition for a build, expressed as a percentage (0-100)"
msgstr "製造預估損耗(百分比 0–100)"
-#: part/models.py:4030
+#: part/models.py:4162
msgid "Rounding Multiple"
msgstr "進位倍數"
-#: part/models.py:4032
+#: part/models.py:4164
msgid "Round up required production quantity to nearest multiple of this value"
msgstr "將所需生產數量向上取整到此數值的整數倍"
-#: part/models.py:4040
+#: part/models.py:4172
msgid "BOM item reference"
msgstr "物料清單項目引用"
-#: part/models.py:4048
+#: part/models.py:4180
msgid "BOM item notes"
msgstr "物料清單項目註釋"
-#: part/models.py:4054
+#: part/models.py:4186
msgid "Checksum"
msgstr "校驗和"
-#: part/models.py:4055
+#: part/models.py:4187
msgid "BOM line checksum"
msgstr "物料清單行校驗和"
-#: part/models.py:4060
+#: part/models.py:4192
msgid "Validated"
msgstr "已驗證"
-#: part/models.py:4061
+#: part/models.py:4193
msgid "This BOM item has been validated"
msgstr "此物料清單項目已驗證"
-#: part/models.py:4066
+#: part/models.py:4198
msgid "Gets inherited"
msgstr "獲取繼承的"
-#: part/models.py:4067
+#: part/models.py:4199
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "此物料清單項目是由物料清單繼承的變體零件"
-#: part/models.py:4073
+#: part/models.py:4205
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "變體零件的庫存項可以用於此物料清單項目"
-#: part/models.py:4180 stock/models.py:932
+#: part/models.py:4312 stock/models.py:957
msgid "Quantity must be integer value for trackable parts"
msgstr "可追蹤零件的數量必須是整數"
-#: part/models.py:4190 part/models.py:4192
+#: part/models.py:4322 part/models.py:4324
msgid "Sub part must be specified"
msgstr "必須指定子零件"
-#: part/models.py:4343
+#: part/models.py:4475
msgid "BOM Item Substitute"
msgstr "物料清單項目替代品"
-#: part/models.py:4364
+#: part/models.py:4496
msgid "Substitute part cannot be the same as the master part"
msgstr "替代品零件不能與主零件相同"
-#: part/models.py:4377
+#: part/models.py:4509
msgid "Parent BOM item"
msgstr "上級物料清單項目"
-#: part/models.py:4385
+#: part/models.py:4517
msgid "Substitute part"
msgstr "替代品零件"
-#: part/models.py:4401
+#: part/models.py:4533
msgid "Part 1"
msgstr "零件 1"
-#: part/models.py:4409
+#: part/models.py:4541
msgid "Part 2"
msgstr "零件2"
-#: part/models.py:4410
+#: part/models.py:4542
msgid "Select Related Part"
msgstr "選擇相關的零件"
-#: part/models.py:4417
+#: part/models.py:4549
msgid "Note for this relationship"
msgstr "此關係的備註"
-#: part/models.py:4436
+#: part/models.py:4568
msgid "Part relationship cannot be created between a part and itself"
msgstr "零件關係不能在零件和自身之間創建"
-#: part/models.py:4441
+#: part/models.py:4573
msgid "Duplicate relationship already exists"
msgstr "複製關係已經存在"
-#: part/serializers.py:109
+#: part/serializers.py:66
+msgid "Delete Subcategories"
+msgstr ""
+
+#: part/serializers.py:67
+msgid "Delete all sub-categories contained within this category"
+msgstr ""
+
+#: part/serializers.py:72
+msgid "Delete Parts"
+msgstr ""
+
+#: part/serializers.py:73
+msgid "Delete all parts contained within this category"
+msgstr ""
+
+#: part/serializers.py:128
msgid "Parent Category"
msgstr "上級類別"
-#: part/serializers.py:110
+#: part/serializers.py:129
msgid "Parent part category"
msgstr "上級零件類別"
-#: part/serializers.py:118 part/serializers.py:170
+#: part/serializers.py:137 part/serializers.py:189
msgid "Subcategories"
msgstr "子類別"
-#: part/serializers.py:209
+#: part/serializers.py:228
msgid "Results"
msgstr "結果"
-#: part/serializers.py:210
+#: part/serializers.py:229
msgid "Number of results recorded against this template"
msgstr "根據該模板記錄的結果數量"
-#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672
+#: part/serializers.py:260 part/serializers.py:278 stock/serializers.py:674
msgid "Purchase currency of this stock item"
msgstr "購買此庫存項的貨幣"
-#: part/serializers.py:286
+#: part/serializers.py:305
msgid "File is not an image"
msgstr "檔案不是圖片"
-#: part/serializers.py:396
+#: part/serializers.py:415
msgid "Original Part"
msgstr "原始零件"
-#: part/serializers.py:397
+#: part/serializers.py:416
msgid "Select original part to duplicate"
msgstr "選擇要複製的原始零件"
-#: part/serializers.py:402
+#: part/serializers.py:421
msgid "Copy Image"
msgstr "複製圖片"
-#: part/serializers.py:403
+#: part/serializers.py:422
msgid "Copy image from original part"
msgstr "從原零件複製圖片"
-#: part/serializers.py:409
+#: part/serializers.py:428
msgid "Copy BOM"
msgstr "複製物料清單"
-#: part/serializers.py:410
+#: part/serializers.py:429
msgid "Copy bill of materials from original part"
msgstr "從原始零件複製材料清單"
-#: part/serializers.py:417
+#: part/serializers.py:436
msgid "Copy parameter data from original part"
msgstr "從原始零件複製參數數據"
-#: part/serializers.py:423
+#: part/serializers.py:442
msgid "Copy Notes"
msgstr "複製備註"
-#: part/serializers.py:424
+#: part/serializers.py:443
msgid "Copy notes from original part"
msgstr "從原始零件複製備註"
-#: part/serializers.py:430
+#: part/serializers.py:449
msgid "Copy Tests"
msgstr "複製測試模板"
-#: part/serializers.py:431
+#: part/serializers.py:450
msgid "Copy test templates from original part"
msgstr "從原始零件複製測試模板"
-#: part/serializers.py:449
+#: part/serializers.py:468
msgid "Initial Stock Quantity"
msgstr "初始化庫存數量"
-#: part/serializers.py:451
+#: part/serializers.py:470
msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added."
msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。"
-#: part/serializers.py:458
+#: part/serializers.py:477
msgid "Initial Stock Location"
msgstr "初始化庫存地點"
-#: part/serializers.py:459
+#: part/serializers.py:478
msgid "Specify initial stock location for this Part"
msgstr "初始化指定此零件的庫存地點"
-#: part/serializers.py:476
+#: part/serializers.py:495
msgid "Select supplier (or leave blank to skip)"
msgstr "選擇供應商(或為空以跳過)"
-#: part/serializers.py:492
+#: part/serializers.py:511
msgid "Select manufacturer (or leave blank to skip)"
msgstr "選擇製造商(或為空)"
-#: part/serializers.py:502
+#: part/serializers.py:521
msgid "Manufacturer part number"
msgstr "製造商零件號"
-#: part/serializers.py:509
+#: part/serializers.py:528
msgid "Selected company is not a valid supplier"
msgstr "所選公司不是一個有效的供應商"
-#: part/serializers.py:518
+#: part/serializers.py:537
msgid "Selected company is not a valid manufacturer"
msgstr "所選公司不是一個有效的製造商"
-#: part/serializers.py:529
+#: part/serializers.py:548
msgid "Manufacturer part matching this MPN already exists"
msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在"
-#: part/serializers.py:536
+#: part/serializers.py:555
msgid "Supplier part matching this SKU already exists"
msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在"
-#: part/serializers.py:816
+#: part/serializers.py:840
msgid "Category Name"
msgstr "類別名稱"
-#: part/serializers.py:845
+#: part/serializers.py:869
msgid "Building"
msgstr "正在生產"
-#: part/serializers.py:846
+#: part/serializers.py:870
msgid "Quantity of this part currently being in production"
msgstr "此零件目前生產中數量"
-#: part/serializers.py:853
+#: part/serializers.py:877
msgid "Outstanding quantity of this part scheduled to be built"
msgstr "此零件排程待製造未完成數量"
-#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231
-#: users/ruleset.py:30
+#: part/serializers.py:897 stock/serializers.py:1050 stock/serializers.py:1254
+#: users/ruleset.py:33
msgid "Stock Items"
msgstr "庫存項"
-#: part/serializers.py:877
+#: part/serializers.py:901
msgid "Revisions"
msgstr "修訂"
-#: part/serializers.py:881 part/serializers.py:1188
+#: part/serializers.py:905 part/serializers.py:1204
#: 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:913
msgid "Unallocated Stock"
msgstr "未分配的庫存"
-#: part/serializers.py:897
+#: part/serializers.py:921
msgid "Variant Stock"
msgstr "變體庫存"
-#: part/serializers.py:968
+#: part/serializers.py:996
msgid "Duplicate Part"
msgstr "重複零件"
-#: part/serializers.py:969
+#: part/serializers.py:997
msgid "Copy initial data from another Part"
msgstr "從另一個零件複製初始數據"
-#: part/serializers.py:975
+#: part/serializers.py:1003
msgid "Initial Stock"
msgstr "初始庫存"
-#: part/serializers.py:976
+#: part/serializers.py:1004
msgid "Create Part with initial stock quantity"
msgstr "創建具有初始庫存數量的零件"
-#: part/serializers.py:982
+#: part/serializers.py:1010
msgid "Supplier Information"
msgstr "供應商信息"
-#: part/serializers.py:983
+#: part/serializers.py:1011
msgid "Add initial supplier information for this part"
msgstr "添加此零件的初始供應商信息"
-#: part/serializers.py:992
+#: part/serializers.py:1020
msgid "Copy Category Parameters"
msgstr "複製類別參數"
-#: part/serializers.py:993
+#: part/serializers.py:1021
msgid "Copy parameter templates from selected part category"
msgstr "從選擇的零件複製參數模版"
-#: part/serializers.py:998
+#: part/serializers.py:1026
msgid "Existing Image"
msgstr "現有的圖片"
-#: part/serializers.py:999
+#: part/serializers.py:1027
msgid "Filename of an existing part image"
msgstr "現有零件圖片的文件名"
-#: part/serializers.py:1016
+#: part/serializers.py:1044
msgid "Image file does not exist"
msgstr "圖片不存在"
-#: part/serializers.py:1160
+#: part/serializers.py:1176
msgid "Validate entire Bill of Materials"
msgstr "驗證整個物料清單"
-#: part/serializers.py:1194 part/serializers.py:1802
+#: part/serializers.py:1210 part/serializers.py:1806
msgid "Can Build"
msgstr "可以創建"
-#: part/serializers.py:1211
+#: part/serializers.py:1227
msgid "Required for Build Orders"
msgstr "生產工單需求數"
-#: part/serializers.py:1216
+#: part/serializers.py:1232
msgid "Allocated to Build Orders"
msgstr "已分配至生產工單"
-#: part/serializers.py:1223
+#: part/serializers.py:1239
msgid "Required for Sales Orders"
msgstr "銷售訂單需求數"
-#: part/serializers.py:1227
+#: part/serializers.py:1243
msgid "Allocated to Sales Orders"
msgstr "已分配至銷售訂單"
-#: part/serializers.py:1287
+#: part/serializers.py:1303
msgid "Part IPN"
-msgstr ""
+msgstr "零件 IPN"
-#: part/serializers.py:1294
+#: part/serializers.py:1310
msgid "Part Description"
-msgstr ""
+msgstr "零件描述"
-#: part/serializers.py:1338
+#: part/serializers.py:1354
msgid "Select a part to generate stocktake information for that part (and any variant parts)"
-msgstr ""
+msgstr "選擇一個零件以產生該零件 (及其任何變體零件) 的盤點資訊"
-#: part/serializers.py:1348
+#: part/serializers.py:1364
msgid "Select a category to include all parts within that category (and subcategories)"
-msgstr ""
+msgstr "選擇一個類別以包含該類別 (及其子類別) 內的所有零件"
-#: part/serializers.py:1358
+#: part/serializers.py:1374
msgid "Select a location to include all parts with stock in that location (including sub-locations)"
-msgstr ""
+msgstr "選擇一個位置以包含該位置 (及其子位置) 內所有有庫存的零件"
-#: part/serializers.py:1365
+#: part/serializers.py:1381
msgid "Generate Stocktake Entries"
-msgstr ""
+msgstr "產生盤點項目"
-#: part/serializers.py:1366
+#: part/serializers.py:1382
msgid "Save stocktake entries for the selected parts"
-msgstr ""
+msgstr "儲存選定零件的盤點項目"
-#: part/serializers.py:1373
+#: part/serializers.py:1389
msgid "Generate Report"
msgstr "產製報表"
-#: part/serializers.py:1374
+#: part/serializers.py:1390
msgid "Generate a stocktake report for the selected parts"
msgstr "產製選定零件的庫存報表"
-#: part/serializers.py:1477
+#: part/serializers.py:1493
msgid "Minimum Price"
msgstr "最低價格"
-#: part/serializers.py:1478
+#: part/serializers.py:1494
msgid "Override calculated value for minimum price"
msgstr "覆蓋已計算的最低價格值"
-#: part/serializers.py:1485
+#: part/serializers.py:1501
msgid "Minimum price currency"
msgstr "最低價格貨幣"
-#: part/serializers.py:1492
+#: part/serializers.py:1508
msgid "Maximum Price"
msgstr "最高價格"
-#: part/serializers.py:1493
+#: part/serializers.py:1509
msgid "Override calculated value for maximum price"
msgstr "覆蓋已計算的最高價格值"
-#: part/serializers.py:1500
+#: part/serializers.py:1516
msgid "Maximum price currency"
msgstr "最高價格貨幣"
-#: part/serializers.py:1529
+#: part/serializers.py:1545
msgid "Update"
msgstr "更新"
-#: part/serializers.py:1530
+#: part/serializers.py:1546
msgid "Update pricing for this part"
msgstr "更新這個零件的價格"
-#: part/serializers.py:1553
+#: part/serializers.py:1569
#, python-brace-format
msgid "Could not convert from provided currencies to {default_currency}"
msgstr "無法將所提供的貨幣轉換為 {default_currency}"
-#: part/serializers.py:1560
+#: part/serializers.py:1576
msgid "Minimum price must not be greater than maximum price"
msgstr "最低價格不能高於最高價格。"
-#: part/serializers.py:1563
+#: part/serializers.py:1579
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"
+msgid "Amount required for this item (can include units)"
msgstr ""
-#: part/serializers.py:1729
+#: part/serializers.py:1733
msgid "Select the parent assembly"
msgstr "選擇父裝配"
-#: part/serializers.py:1764
+#: part/serializers.py:1768
msgid "Select the component part"
msgstr "選擇零部件"
-#: part/serializers.py:1991
+#: part/serializers.py:1888
+msgid "Invalid quantity format"
+msgstr ""
+
+#: part/serializers.py:2017
msgid "Select part to copy BOM from"
msgstr "選擇要複製物料清單的零件"
-#: part/serializers.py:1999
+#: part/serializers.py:2025
msgid "Remove Existing Data"
msgstr "移除現有數據"
-#: part/serializers.py:2000
+#: part/serializers.py:2026
msgid "Remove existing BOM items before copying"
msgstr "複製前刪除現有的物料清單項目"
-#: part/serializers.py:2005
+#: part/serializers.py:2031
msgid "Include Inherited"
msgstr "包含繼承的"
-#: part/serializers.py:2006
+#: part/serializers.py:2032
msgid "Include BOM items which are inherited from templated parts"
msgstr "包含從模板零件繼承的物料清單項目"
-#: part/serializers.py:2011
+#: part/serializers.py:2037
msgid "Skip Invalid Rows"
msgstr "跳過無效行"
-#: part/serializers.py:2012
+#: part/serializers.py:2038
msgid "Enable this option to skip invalid rows"
msgstr "啓用此選項以跳過無效行"
-#: part/serializers.py:2017
+#: part/serializers.py:2043
msgid "Copy Substitute Parts"
msgstr "複製替代品零件"
-#: part/serializers.py:2018
+#: part/serializers.py:2044
msgid "Copy substitute parts when duplicate BOM items"
msgstr "複製物料清單項目時複製替代品零件"
@@ -7091,15 +7362,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 "沒有要打印的項目"
@@ -7160,7 +7431,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
@@ -7367,19 +7638,19 @@ msgstr "支援自 InvenTree 匯出資料"
#: plugin/builtin/exporter/parameter_exporter.py:16
msgid "Exclude Inactive"
-msgstr ""
+msgstr "排除停用"
#: plugin/builtin/exporter/parameter_exporter.py:17
msgid "Exclude parameters which are inactive"
-msgstr ""
+msgstr "排除已停用的參數"
#: plugin/builtin/exporter/parameter_exporter.py:29
msgid "Parameter Exporter"
-msgstr ""
+msgstr "參數匯出工具"
#: plugin/builtin/exporter/parameter_exporter.py:30
msgid "Exporter for model parameter data"
-msgstr ""
+msgstr "模型參數資料的匯出工具"
#: plugin/builtin/exporter/stocktake_exporter.py:25
msgid "Include External Stock"
@@ -7455,7 +7726,7 @@ msgstr "整合的 Slack 通知方式"
#: plugin/builtin/integration/core_notifications.py:131
msgid "Slack incoming webhook URL"
-msgstr ""
+msgstr "Slack 傳入 Webhook URL"
#: plugin/builtin/integration/core_notifications.py:132
msgid "URL that is used to send messages to a slack channel"
@@ -7475,11 +7746,11 @@ msgstr "默認貨幣兑換集成"
#: plugin/builtin/integration/machine_types.py:15
msgid "InvenTree Machines"
-msgstr ""
+msgstr "InvenTree 機器"
#: plugin/builtin/integration/machine_types.py:16
msgid "Built-in machine types for InvenTree"
-msgstr ""
+msgstr "InvenTree 內建機器類型"
#: plugin/builtin/integration/part_notifications.py:20
msgid "Part Notifications"
@@ -7506,20 +7777,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"
@@ -7560,7 +7831,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 "橫屏模式"
@@ -7643,7 +7914,7 @@ msgstr "作為‘TME’的供應商"
#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169
#: plugin/serializers.py:275
msgid "Only superuser accounts can administer plugins"
-msgstr ""
+msgstr "只有超級使用者帳號可以管理外掛程式"
#: plugin/installer.py:243
msgid "Plugin installation is disabled"
@@ -7651,11 +7922,11 @@ msgstr "插件安裝已禁用"
#: plugin/installer.py:273
msgid "No package name or URL provided for installation"
-msgstr ""
+msgstr "未提供要安裝的套件名稱或 URL"
#: plugin/installer.py:277
msgid "Invalid characters in package name or URL"
-msgstr ""
+msgstr "套件名稱或 URL 中包含無效字元"
#: plugin/installer.py:287
msgid "Installed plugin successfully"
@@ -7762,7 +8033,7 @@ msgstr "軟件包插件"
msgid "Plugin"
msgstr "插件"
-#: plugin/plugin.py:389
+#: plugin/plugin.py:388
msgid "No author found"
msgstr "未找到作者"
@@ -7955,7 +8226,7 @@ msgstr "安裝尚未確認"
#: plugin/serializers.py:152
msgid "Either packagename or URL must be provided"
-msgstr ""
+msgstr "必須提供套件名稱或 URL"
#: plugin/serializers.py:191
msgid "Full reload"
@@ -8021,7 +8292,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 "沒有有效的項目提供到模板"
@@ -8065,118 +8336,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"
@@ -8225,13 +8496,10 @@ msgstr "所需材料"
#: report/templates/report/inventree_stock_report_merge.html:106
#: report/templates/report/inventree_test_report.html:84
#: report/templates/report/inventree_test_report.html:162
+#: report/templates/report/inventree_transfer_order_report.html:37
msgid "Part image"
msgstr "零件圖像"
-#: report/templates/report/inventree_build_order_report.html:121
-msgid "Issued"
-msgstr "已派發"
-
#: report/templates/report/inventree_build_order_report.html:146
msgid "Required For"
msgstr "需要給"
@@ -8267,7 +8535,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:1115
#: stock/serializers.py:164 templates/email/stale_stock_notification.html:21
msgid "Serial Number"
msgstr "序列號"
@@ -8292,7 +8560,7 @@ msgstr "庫存項測試報告"
#: report/templates/report/inventree_stock_report_merge.html:97
#: report/templates/report/inventree_test_report.html:153
-#: stock/serializers.py:655
+#: stock/serializers.py:657
msgid "Installed Items"
msgstr "已安裝的項目"
@@ -8325,17 +8593,21 @@ msgstr "無結果 (必填)"
msgid "No result"
msgstr "沒有結果"
+#: report/templates/report/inventree_transfer_order_report.html:28
+msgid "Transferred"
+msgstr ""
+
#: report/templatetags/report.py:166
msgid "Invalid media file path"
-msgstr ""
+msgstr "無效的媒體檔案路徑"
#: report/templatetags/report.py:185
msgid "Invalid static file path"
-msgstr ""
+msgstr "無效的靜態檔案路徑"
#: report/templatetags/report.py:287
msgid "Asset file not found"
-msgstr ""
+msgstr "找不到資產檔案"
#: report/templatetags/report.py:345 report/templatetags/report.py:461
msgid "Image file not found"
@@ -8343,7 +8615,7 @@ msgstr "找不到圖片文件"
#: report/templatetags/report.py:430
msgid "No image file specified"
-msgstr ""
+msgstr "未指定影像檔案"
#: report/templatetags/report.py:455
msgid "part_image tag requires a Part instance"
@@ -8353,491 +8625,499 @@ msgstr "parpart_image 標籤需要一個零件實例"
msgid "company_image tag requires a Company instance"
msgstr "公司_圖片標籤需要一個公司實例"
-#: stock/api.py:287
+#: stock/api.py:288
msgid "Filter by location depth"
msgstr "按位置深度篩選"
-#: stock/api.py:307
+#: stock/api.py:308
msgid "Filter by top-level locations"
msgstr "按頂級位置篩選"
-#: stock/api.py:322
+#: stock/api.py:323
msgid "Include sub-locations in filtered results"
msgstr "在篩選結果中包含子地點"
-#: stock/api.py:343 stock/serializers.py:1227
+#: stock/api.py:344 stock/serializers.py:1250
msgid "Parent Location"
msgstr "上級地點"
-#: stock/api.py:344
+#: stock/api.py:345
msgid "Filter by parent location"
msgstr "按上級位置篩選"
-#: stock/api.py:604
+#: stock/api.py:609
msgid "Part name (case insensitive)"
msgstr "零件名稱(不分大小寫)"
-#: stock/api.py:610
+#: stock/api.py:615
msgid "Part name contains (case insensitive)"
msgstr "零件名稱包含(不分大小寫)"
-#: stock/api.py:616
+#: stock/api.py:621
msgid "Part name (regex)"
msgstr "零件名稱(正則)"
-#: stock/api.py:621
+#: stock/api.py:626
msgid "Part IPN (case insensitive)"
msgstr "零件 IPN(不分大小寫)"
-#: stock/api.py:627
+#: stock/api.py:632
msgid "Part IPN contains (case insensitive)"
msgstr "零件 IPN 包含(不分大小寫)"
-#: stock/api.py:633
+#: stock/api.py:638
msgid "Part IPN (regex)"
msgstr "零件 IPN(正則)"
-#: stock/api.py:645
+#: stock/api.py:650
msgid "Minimum stock"
msgstr "最小庫存"
-#: stock/api.py:649
+#: stock/api.py:654
msgid "Maximum stock"
msgstr "最大庫存"
-#: stock/api.py:652
+#: stock/api.py:657
msgid "Status Code"
msgstr "狀態代碼"
-#: stock/api.py:692
+#: stock/api.py:701
msgid "External Location"
msgstr "外部地點"
-#: stock/api.py:791
+#: stock/api.py:800
msgid "Consumed by Build Order"
msgstr "被生產工單消耗"
-#: stock/api.py:801
+#: stock/api.py:810
msgid "Installed in other stock item"
msgstr "已安裝於其他庫存項"
-#: stock/api.py:890
+#: stock/api.py:899
msgid "Part Tree"
msgstr "零件樹"
-#: stock/api.py:912
+#: stock/api.py:921
msgid "Updated before"
msgstr "更新時間早於"
-#: stock/api.py:916
+#: stock/api.py:925
msgid "Updated after"
msgstr "更新時間晚於"
-#: stock/api.py:920
+#: stock/api.py:929
msgid "Stocktake Before"
msgstr "盤點日期早於"
-#: stock/api.py:924
+#: stock/api.py:933
msgid "Stocktake After"
msgstr "盤點日期晚於"
-#: stock/api.py:929
+#: stock/api.py:938
msgid "Expiry date before"
msgstr "過期日期前"
-#: stock/api.py:933
+#: stock/api.py:942
msgid "Expiry date after"
msgstr "過期日期後"
-#: stock/api.py:936 stock/serializers.py:660
+#: stock/api.py:945 stock/serializers.py:662
msgid "Stale"
msgstr "過期"
-#: stock/api.py:962
+#: stock/api.py:971
msgid "Provide a StockItem PK to exclude that item and all its descendants"
-msgstr ""
+msgstr "提供一個 StockItem PK 以排除該項目及其所有子項目"
-#: stock/api.py:980
+#: stock/api.py:989
msgid "Cascade Locations"
-msgstr ""
+msgstr "級聯位置"
-#: stock/api.py:981
+#: stock/api.py:990
msgid "If true, include items in child locations of the given location"
-msgstr ""
+msgstr "若為 true,則包含給定位置的子位置中的項目"
-#: stock/api.py:987
+#: stock/api.py:996
msgid "Filter by numeric Location ID or the literal 'null'"
-msgstr ""
+msgstr "依數字位置 ID 或常值 'null' 篩選"
-#: stock/api.py:1087
+#: stock/api.py:1096
msgid "Quantity is required"
msgstr "請先輸入數量"
-#: stock/api.py:1092
+#: stock/api.py:1101
msgid "Valid part must be supplied"
msgstr "必須提供有效的零件"
-#: stock/api.py:1123
+#: stock/api.py:1132
msgid "The given supplier part does not exist"
msgstr "給定的供應商零件不存在"
-#: stock/api.py:1133
+#: stock/api.py:1142
msgid "The supplier part has a pack size defined, but flag use_pack_size not set"
msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置"
-#: stock/api.py:1165
+#: stock/api.py:1174
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr "不能為不可跟蹤的零件提供序列號"
-#: stock/api.py:1409
-msgid "Include Installed"
-msgstr ""
-
-#: stock/api.py:1411
-msgid "If true, include test results for items installed underneath the given stock item"
-msgstr ""
-
#: stock/api.py:1418
+msgid "Include Installed"
+msgstr "包含已安裝"
+
+#: stock/api.py:1420
+msgid "If true, include test results for items installed underneath the given stock item"
+msgstr "若為 true,則包含安裝在給定庫存項目下方的項目的測試結果"
+
+#: stock/api.py:1427
msgid "Filter by numeric Stock Item ID"
msgstr "使用數字庫存品項 ID 做過濾"
-#: stock/api.py:1439
+#: stock/api.py:1448
#, python-brace-format
msgid "Stock item with ID {id} does not exist"
msgstr "庫存品項 ID {id} 不存在"
-#: stock/api.py:1516
+#: stock/api.py:1525
msgid "Include Part Variants"
msgstr "包括零件變數"
-#: stock/api.py:1546
+#: stock/api.py:1555
msgid "Date after"
msgstr "日前之後"
-#: stock/api.py:1550
+#: stock/api.py:1559
msgid "Date before"
msgstr "日期之前"
-#: stock/models.py:73
+#: stock/models.py:74
msgid "Stock Location type"
msgstr "庫存地點類型"
-#: stock/models.py:74
+#: stock/models.py:75
msgid "Stock Location types"
msgstr "庫存地點類型"
-#: stock/models.py:100
+#: stock/models.py:101
msgid "Default icon for all locations that have no icon set (optional)"
msgstr "為所有沒有圖標的位置設置默認圖標(可選)"
-#: stock/models.py:147 stock/models.py:1052
+#: stock/models.py:148 stock/models.py:1077
msgid "Stock Location"
msgstr "庫存地點"
-#: stock/models.py:148 users/ruleset.py:29
+#: stock/models.py:149 users/ruleset.py:32
msgid "Stock Locations"
msgstr "庫存地點"
-#: stock/models.py:197 stock/models.py:1217
+#: stock/models.py:198 stock/models.py:1242
msgid "Owner"
msgstr "所有者"
-#: stock/models.py:198 stock/models.py:1218
+#: stock/models.py:199 stock/models.py:1243
msgid "Select Owner"
msgstr "選擇所有者"
-#: stock/models.py:206
+#: stock/models.py:207
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:214 users/models.py:495
msgid "External"
msgstr "外部"
-#: stock/models.py:214
+#: stock/models.py:215
msgid "This is an external stock location"
msgstr "這是一個外部庫存地點"
-#: stock/models.py:220
+#: stock/models.py:221
msgid "Location type"
msgstr "位置類型"
-#: stock/models.py:224
+#: stock/models.py:225
msgid "Stock location type of this location"
msgstr "該位置的庫存地點類型"
-#: stock/models.py:296
+#: stock/models.py:297
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:538
+msgid "Serialized stock items cannot be deleted"
+msgstr ""
+
+#: stock/models.py:675
#, python-brace-format
msgid "{field} does not exist"
msgstr "{field} 不存在"
-#: stock/models.py:598
+#: stock/models.py:688
msgid "Part must be specified"
msgstr "必須指定零件"
-#: stock/models.py:911
+#: stock/models.py:925
msgid "Stock items cannot be located into structural stock locations!"
msgstr "庫存項不能存放在結構性庫存地點!"
-#: stock/models.py:938 stock/serializers.py:469
+#: stock/models.py:946
+msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number"
+msgstr ""
+
+#: stock/models.py:963 stock/serializers.py:469
msgid "Stock item cannot be created for virtual parts"
msgstr "無法為虛擬零件創建庫存項"
-#: stock/models.py:955
+#: stock/models.py:980
#, 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:990 stock/models.py:1003
msgid "Quantity must be 1 for item with a serial number"
msgstr "有序列號的項目的數量必須是1"
-#: stock/models.py:968
+#: stock/models.py:993
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "如果數量大於1,則不能設置序列號"
-#: stock/models.py:990
+#: stock/models.py:1015
msgid "Item cannot belong to itself"
msgstr "項目不能屬於其自身"
-#: stock/models.py:995
+#: stock/models.py:1020
msgid "Item must have a build reference if is_building=True"
msgstr "如果is_building=True,則項必須具有構建引用"
-#: stock/models.py:1008
+#: stock/models.py:1033
msgid "Build reference does not point to the same part object"
msgstr "構建引用未指向同一零件對象"
-#: stock/models.py:1022
+#: stock/models.py:1047
msgid "Parent Stock Item"
msgstr "母庫存項目"
-#: stock/models.py:1034
+#: stock/models.py:1059
msgid "Base part"
msgstr "基礎零件"
-#: stock/models.py:1044
+#: stock/models.py:1069
msgid "Select a matching supplier part for this stock item"
msgstr "為此庫存項目選擇匹配的供應商零件"
-#: stock/models.py:1056
+#: stock/models.py:1081
msgid "Where is this stock item located?"
msgstr "這個庫存物品在哪裏?"
-#: stock/models.py:1064 stock/serializers.py:1682
+#: stock/models.py:1089 stock/serializers.py:1709
msgid "Packaging this stock item is stored in"
msgstr "包裝此庫存物品存儲在"
-#: stock/models.py:1070
+#: stock/models.py:1095
msgid "Installed In"
msgstr "安裝於"
-#: stock/models.py:1075
+#: stock/models.py:1100
msgid "Is this item installed in another item?"
msgstr "此項目是否安裝在另一個項目中?"
-#: stock/models.py:1094
+#: stock/models.py:1119
msgid "Serial number for this item"
msgstr "此項目的序列號"
-#: stock/models.py:1111 stock/serializers.py:1667
+#: stock/models.py:1136 stock/serializers.py:1694
msgid "Batch code for this stock item"
msgstr "此庫存項的批號"
-#: stock/models.py:1116
+#: stock/models.py:1141
msgid "Stock Quantity"
msgstr "庫存數量"
-#: stock/models.py:1126
+#: stock/models.py:1151
msgid "Source Build"
msgstr "源代碼構建"
-#: stock/models.py:1129
+#: stock/models.py:1154
msgid "Build for this stock item"
msgstr "為此庫存項目構建"
-#: stock/models.py:1136
+#: stock/models.py:1161
msgid "Consumed By"
msgstr "消費者"
-#: stock/models.py:1139
+#: stock/models.py:1164
msgid "Build order which consumed this stock item"
msgstr "構建消耗此庫存項的生產訂單"
-#: stock/models.py:1148
+#: stock/models.py:1173
msgid "Source Purchase Order"
msgstr "採購訂單來源"
-#: stock/models.py:1152
+#: stock/models.py:1177
msgid "Purchase order for this stock item"
msgstr "此庫存商品的採購訂單"
-#: stock/models.py:1158
+#: stock/models.py:1183
msgid "Destination Sales Order"
msgstr "目的地銷售訂單"
-#: stock/models.py:1169
+#: stock/models.py:1194
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr "庫存物品的到期日。在此日期之後,庫存將被視為過期"
-#: stock/models.py:1187
+#: stock/models.py:1212
msgid "Delete on deplete"
msgstr "耗盡時刪除"
-#: stock/models.py:1188
+#: stock/models.py:1213
msgid "Delete this Stock Item when stock is depleted"
msgstr "當庫存耗盡時刪除此庫存項"
-#: stock/models.py:1209
+#: stock/models.py:1234
msgid "Single unit purchase price at time of purchase"
msgstr "購買時一個單位的價格"
-#: stock/models.py:1240
+#: stock/models.py:1265
msgid "Converted to part"
msgstr "轉換為零件"
-#: stock/models.py:1442
+#: stock/models.py:1467
msgid "Quantity exceeds available stock"
msgstr "數量超過可用庫存"
-#: stock/models.py:1893
+#: stock/models.py:1954
msgid "Part is not set as trackable"
msgstr "零件未設置為可跟蹤"
-#: stock/models.py:1899
+#: stock/models.py:1960
msgid "Quantity must be integer"
msgstr "數量必須是整數"
-#: stock/models.py:1907
+#: stock/models.py:1968
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({self.quantity})"
msgstr "數量不得超過現有庫存量 ({self.quantity})"
-#: stock/models.py:1913
+#: stock/models.py:1974
msgid "Serial numbers must be provided as a list"
msgstr "序列號需以清單提供"
-#: stock/models.py:1918
+#: stock/models.py:1979
msgid "Quantity does not match serial numbers"
msgstr "數量不匹配序列號"
-#: stock/models.py:1936
+#: stock/models.py:1997
msgid "Cannot assign stock to structural location"
msgstr "無法將庫存分配到結構位置"
-#: stock/models.py:2053 stock/models.py:3023
+#: stock/models.py:2114 stock/models.py:3096
msgid "Test template does not exist"
msgstr "測試模板不存在"
-#: stock/models.py:2071
+#: stock/models.py:2132
msgid "Stock item has been assigned to a sales order"
msgstr "庫存項已分配到銷售訂單"
-#: stock/models.py:2075
+#: stock/models.py:2136
msgid "Stock item is installed in another item"
msgstr "庫存項已安裝在另一個項目中"
-#: stock/models.py:2078
+#: stock/models.py:2139
msgid "Stock item contains other items"
msgstr "庫存項包含其他項目"
-#: stock/models.py:2081
+#: stock/models.py:2142
msgid "Stock item has been assigned to a customer"
msgstr "庫存項已分配給客户"
-#: stock/models.py:2084 stock/models.py:2270
+#: stock/models.py:2145 stock/models.py:2331
msgid "Stock item is currently in production"
msgstr "庫存項目前正在生產"
-#: stock/models.py:2087
+#: stock/models.py:2148
msgid "Serialized stock cannot be merged"
msgstr "序列化的庫存不能合併"
-#: stock/models.py:2094 stock/serializers.py:1537
+#: stock/models.py:2155 stock/serializers.py:1564
msgid "Duplicate stock items"
msgstr "複製庫存項"
-#: stock/models.py:2098
+#: stock/models.py:2159
msgid "Stock items must refer to the same part"
msgstr "庫存項必須指相同零件"
-#: stock/models.py:2106
+#: stock/models.py:2167
msgid "Stock items must refer to the same supplier part"
msgstr "庫存項必須是同一供應商的零件"
-#: stock/models.py:2111
+#: stock/models.py:2172
msgid "Stock status codes must match"
msgstr "庫存狀態碼必須匹配"
-#: stock/models.py:2411
+#: stock/models.py:2476
msgid "StockItem cannot be moved as it is not in stock"
msgstr "庫存項不能移動,因為它沒有庫存"
-#: stock/models.py:2905
+#: stock/models.py:2978
msgid "Stock Item Tracking"
msgstr "庫存項跟蹤"
-#: stock/models.py:2955
+#: stock/models.py:3028
msgid "Entry notes"
msgstr "條目註釋"
-#: stock/models.py:2995
+#: stock/models.py:3068
msgid "Stock Item Test Result"
msgstr "庫存項測試結果"
-#: stock/models.py:3026
+#: stock/models.py:3099
msgid "Value must be provided for this test"
msgstr "必須為此測試提供值"
-#: stock/models.py:3030
+#: stock/models.py:3103
msgid "Attachment must be uploaded for this test"
msgstr "測試附件必須上傳"
-#: stock/models.py:3035
+#: stock/models.py:3108
msgid "Invalid value for this test"
msgstr "此測試的值無效"
-#: stock/models.py:3059
+#: stock/models.py:3132
msgid "Test result"
msgstr "測試結果"
-#: stock/models.py:3066
+#: stock/models.py:3139
msgid "Test output value"
msgstr "測試輸出值"
-#: stock/models.py:3074 stock/serializers.py:259
+#: stock/models.py:3147 stock/serializers.py:259
msgid "Test result attachment"
msgstr "測驗結果附件"
-#: stock/models.py:3078
+#: stock/models.py:3151
msgid "Test notes"
msgstr "測試備註"
-#: stock/models.py:3086
+#: stock/models.py:3159
msgid "Test station"
msgstr "測試站"
-#: stock/models.py:3087
+#: stock/models.py:3160
msgid "The identifier of the test station where the test was performed"
msgstr "進行測試的測試站的標識符"
-#: stock/models.py:3093
+#: stock/models.py:3166
msgid "Started"
msgstr "已開始"
-#: stock/models.py:3094
+#: stock/models.py:3167
msgid "The timestamp of the test start"
msgstr "測試開始的時間戳"
-#: stock/models.py:3100
+#: stock/models.py:3173
msgid "Finished"
msgstr "已完成"
-#: stock/models.py:3101
+#: stock/models.py:3174
msgid "The timestamp of the test finish"
msgstr "測試結束的時間戳"
@@ -8913,214 +9193,234 @@ msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量"
msgid "Use pack size"
msgstr "使用包裝數"
-#: stock/serializers.py:463 stock/serializers.py:729
+#: stock/serializers.py:463 stock/serializers.py:731
msgid "Enter serial numbers for new items"
msgstr "輸入新項目的序列號"
-#: stock/serializers.py:571
+#: stock/serializers.py:573
msgid "Supplier Part Number"
msgstr "供應商零件編號"
-#: stock/serializers.py:652 users/models.py:187
+#: stock/serializers.py:654 users/models.py:185
msgid "Expired"
msgstr "已過期"
-#: stock/serializers.py:658
+#: stock/serializers.py:660
msgid "Child Items"
msgstr "子項目"
-#: stock/serializers.py:662
+#: stock/serializers.py:664
msgid "Tracking Items"
msgstr "跟蹤項目"
-#: stock/serializers.py:668
+#: stock/serializers.py:670
msgid "Purchase price of this stock item, per unit or pack"
msgstr "此庫存商品的購買價格,單位或包裝"
-#: stock/serializers.py:706
+#: stock/serializers.py:708
msgid "Enter number of stock items to serialize"
msgstr "輸入要序列化的庫存項目數量"
-#: stock/serializers.py:714 stock/serializers.py:757 stock/serializers.py:795
-#: stock/serializers.py:933
+#: stock/serializers.py:716 stock/serializers.py:759 stock/serializers.py:797
+#: stock/serializers.py:935
msgid "No stock item provided"
msgstr "未提供庫存項"
-#: stock/serializers.py:722
+#: stock/serializers.py:724
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({q})"
msgstr "數量不得超過現有庫存量 ({q})"
-#: stock/serializers.py:740 stock/serializers.py:1494 stock/serializers.py:1815
-#: stock/serializers.py:1864
+#: stock/serializers.py:742 stock/serializers.py:1521 stock/serializers.py:1842
+#: stock/serializers.py:1891
msgid "Destination stock location"
msgstr "目標庫存位置"
-#: stock/serializers.py:760
+#: stock/serializers.py:762
msgid "Serial numbers cannot be assigned to this part"
msgstr "此零件不能分配序列號"
-#: stock/serializers.py:780
+#: stock/serializers.py:782
msgid "Serial numbers already exist"
msgstr "序列號已存在"
-#: stock/serializers.py:830
+#: stock/serializers.py:832
msgid "Select stock item to install"
msgstr "選擇要安裝的庫存項目"
-#: stock/serializers.py:837
+#: stock/serializers.py:839
msgid "Quantity to Install"
msgstr "安裝數量"
-#: stock/serializers.py:838
+#: stock/serializers.py:840
msgid "Enter the quantity of items to install"
msgstr "輸入要安裝的項目數量"
-#: stock/serializers.py:843 stock/serializers.py:923 stock/serializers.py:1065
+#: stock/serializers.py:845 stock/serializers.py:925 stock/serializers.py:1067
msgid "Add transaction note (optional)"
msgstr "添加交易記錄 (可選)"
-#: stock/serializers.py:851
+#: stock/serializers.py:853
msgid "Quantity to install must be at least 1"
msgstr "安裝數量必須至少為1"
-#: stock/serializers.py:859
+#: stock/serializers.py:861
msgid "Stock item is unavailable"
msgstr "庫存項不可用"
-#: stock/serializers.py:870
+#: stock/serializers.py:872
msgid "Selected part is not in the Bill of Materials"
msgstr "所選零件不在物料清單中"
-#: stock/serializers.py:883
+#: stock/serializers.py:885
msgid "Quantity to install must not exceed available quantity"
msgstr "安裝數量不得超過可用數量"
-#: stock/serializers.py:918
+#: stock/serializers.py:920
msgid "Destination location for uninstalled item"
msgstr "已卸載項目的目標位置"
-#: stock/serializers.py:956
+#: stock/serializers.py:958
msgid "Select part to convert stock item into"
msgstr "選擇要將庫存項目轉換為的零件"
-#: stock/serializers.py:969
+#: stock/serializers.py:971
msgid "Selected part is not a valid option for conversion"
msgstr "所選零件不是有效的轉換選項"
-#: stock/serializers.py:986
+#: stock/serializers.py:988
msgid "Cannot convert stock item with assigned SupplierPart"
msgstr "無法轉換已分配供應商零件的庫存項"
-#: stock/serializers.py:1020
+#: stock/serializers.py:1022
msgid "Stock item status code"
msgstr "庫存項狀態代碼"
-#: stock/serializers.py:1049
+#: stock/serializers.py:1051
msgid "Select stock items to change status"
msgstr "選擇要更改狀態的庫存項目"
-#: stock/serializers.py:1055
+#: stock/serializers.py:1057
msgid "No stock items selected"
msgstr "未選擇庫存商品"
-#: stock/serializers.py:1162 stock/serializers.py:1233
+#: stock/serializers.py:1164 stock/serializers.py:1256
msgid "Sublocations"
msgstr "轉租"
-#: stock/serializers.py:1228
+#: stock/serializers.py:1182
+msgid "Delete Stock Items"
+msgstr ""
+
+#: stock/serializers.py:1183
+msgid "Delete all stock items contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1188
+msgid "Delete Sublocations"
+msgstr ""
+
+#: stock/serializers.py:1189
+msgid "Delete all sub-locations contained within this location"
+msgstr ""
+
+#: stock/serializers.py:1251
msgid "Parent stock location"
msgstr "上級庫存地點"
-#: stock/serializers.py:1366
+#: stock/serializers.py:1389
msgid "Part must be salable"
msgstr "零件必須可銷售"
-#: stock/serializers.py:1370
+#: stock/serializers.py:1393
msgid "Item is allocated to a sales order"
msgstr "物料已分配到銷售訂單"
-#: stock/serializers.py:1374
+#: stock/serializers.py:1397
+msgid "Item is allocated to a transfer order"
+msgstr ""
+
+#: stock/serializers.py:1401
msgid "Item is allocated to a build order"
msgstr "項目被分配到生產訂單中"
-#: stock/serializers.py:1398
+#: stock/serializers.py:1425
msgid "Customer to assign stock items"
msgstr "客户分配庫存項目"
-#: stock/serializers.py:1404
+#: stock/serializers.py:1431
msgid "Selected company is not a customer"
msgstr "所選公司不是客户"
-#: stock/serializers.py:1412
+#: stock/serializers.py:1439
msgid "Stock assignment notes"
msgstr "庫存分配説明"
-#: stock/serializers.py:1422 stock/serializers.py:1710
+#: stock/serializers.py:1449 stock/serializers.py:1737
msgid "A list of stock items must be provided"
msgstr "必須提供庫存物品清單"
-#: stock/serializers.py:1501
+#: stock/serializers.py:1528
msgid "Stock merging notes"
msgstr "庫存合併説明"
-#: stock/serializers.py:1506
+#: stock/serializers.py:1533
msgid "Allow mismatched suppliers"
msgstr "允許不匹配的供應商"
-#: stock/serializers.py:1507
+#: stock/serializers.py:1534
msgid "Allow stock items with different supplier parts to be merged"
msgstr "允許合併具有不同供應商零件的庫存項目"
-#: stock/serializers.py:1512
+#: stock/serializers.py:1539
msgid "Allow mismatched status"
msgstr "允許不匹配的狀態"
-#: stock/serializers.py:1513
+#: stock/serializers.py:1540
msgid "Allow stock items with different status codes to be merged"
msgstr "允許合併具有不同狀態代碼的庫存項目"
-#: stock/serializers.py:1523
+#: stock/serializers.py:1550
msgid "At least two stock items must be provided"
msgstr "必須提供至少兩件庫存物品"
-#: stock/serializers.py:1590
+#: stock/serializers.py:1617
msgid "No Change"
msgstr "無更改"
-#: stock/serializers.py:1628
+#: stock/serializers.py:1655
msgid "StockItem primary key value"
msgstr "庫存項主鍵值"
-#: stock/serializers.py:1641
+#: stock/serializers.py:1668
msgid "Stock item is not in stock"
msgstr "庫存項無庫存"
-#: stock/serializers.py:1644
+#: stock/serializers.py:1671
msgid "Stock item is already in stock"
msgstr "庫存項已在庫"
-#: stock/serializers.py:1658
+#: stock/serializers.py:1685
msgid "Quantity must not be negative"
msgstr "數量不可為負"
-#: stock/serializers.py:1700
+#: stock/serializers.py:1727
msgid "Stock transaction notes"
msgstr "庫存交易記錄"
-#: stock/serializers.py:1870
+#: stock/serializers.py:1897
msgid "Merge into existing stock"
msgstr "合併至現有庫存"
-#: stock/serializers.py:1871
+#: stock/serializers.py:1898
msgid "Merge returned items into existing stock items if possible"
msgstr "可行時將退回項目併入現有庫存"
-#: stock/serializers.py:1914
+#: stock/serializers.py:1941
msgid "Next Serial Number"
msgstr "下一個序列號"
-#: stock/serializers.py:1920
+#: stock/serializers.py:1947
msgid "Previous Serial Number"
msgstr "上一個序列號"
@@ -9458,150 +9758,158 @@ 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 "使用者的主要群組"
-#: users/ruleset.py:26
+#: users/ruleset.py:28
msgid "Admin"
msgstr "管理員"
-#: users/ruleset.py:32
+#: users/ruleset.py:31
+msgid "Bills of Material"
+msgstr ""
+
+#: users/ruleset.py:35
msgid "Purchase Orders"
msgstr "採購訂單"
-#: users/ruleset.py:33
+#: users/ruleset.py:36
msgid "Sales Orders"
msgstr "銷售訂單"
-#: users/ruleset.py:34
+#: users/ruleset.py:37
msgid "Return Orders"
msgstr "退貨訂單"
+#: users/ruleset.py:38
+msgid "Transfer Orders"
+msgstr ""
+
#: users/serializers.py:186
msgid "Username"
msgstr "用户名"
@@ -9628,19 +9936,19 @@ msgstr "用户的電子郵件地址"
#: users/serializers.py:240
msgid "User must be authenticated"
-msgstr ""
+msgstr "使用者必須經過驗證"
#: users/serializers.py:249
msgid "Only a superuser can create a token for another user"
-msgstr ""
+msgstr "只有超級使用者可以為其他使用者建立權杖"
#: users/serializers.py:329
msgid "Administrator"
-msgstr ""
+msgstr "管理員"
#: users/serializers.py:330
msgid "Does this user have administrative permissions"
-msgstr ""
+msgstr "此使用者是否具有管理權限"
#: users/serializers.py:335 users/serializers.py:424
msgid "Superuser"
@@ -9676,11 +9984,11 @@ msgstr "忽略密碼規則警告"
#: users/serializers.py:417
msgid "Staff"
-msgstr ""
+msgstr "員工"
#: users/serializers.py:418
msgid "Does this user have staff permissions"
-msgstr ""
+msgstr "此使用者是否具有員工權限"
#: users/serializers.py:468
msgid "You do not have permission to create users"
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..73269e5f30 100644
--- a/src/backend/InvenTree/order/api.py
+++ b/src/backend/InvenTree/order/api.py
@@ -31,6 +31,7 @@ import stock.serializers as stock_serializers
from data_exporter.mixins import DataExportViewMixin
from generic.states.api import StatusView
from InvenTree.api import (
+ BulkDeleteMixin,
BulkUpdateMixin,
ListCreateDestroyAPIView,
ParameterListMixin,
@@ -56,6 +57,8 @@ from order.status_codes import (
ReturnOrderStatus,
SalesOrderStatus,
SalesOrderStatusGroups,
+ TransferOrderStatus,
+ TransferOrderStatusGroups,
)
from part.models import Part
from users.models import Owner
@@ -84,6 +87,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 +722,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 +1082,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']
@@ -1166,6 +1171,50 @@ class SalesOrderAllocate(SalesOrderContextMixin, CreateAPI):
serializer_class = serializers.SalesOrderShipmentAllocationSerializer
+class SalesOrderAutoAllocate(SalesOrderContextMixin, CreateAPI):
+ """API endpoint to automatically allocate stock against a SalesOrder.
+
+ - Offloads work to a background task and returns task detail
+ """
+
+ serializer_class = serializers.SalesOrderAutoAllocationSerializer
+
+ @extend_schema(responses={200: common.serializers.TaskDetailSerializer})
+ def post(self, *args, **kwargs):
+ """Validate parameters and offload auto-allocation to a background task."""
+ from InvenTree.tasks import offload_task
+ from order.tasks import auto_allocate_sales_order
+
+ order_obj = self.get_object()
+ serializer = self.get_serializer(data=self.request.data)
+ serializer.is_valid(raise_exception=True)
+ data = serializer.validated_data
+
+ # Extract related models from the validated data
+ location = data.get('location')
+ exclude_location = data.get('exclude_location')
+ shipment = data.get('shipment')
+ line_items = data.get('line_items', [])
+
+ # Offload to the background worker
+ # Note: We provide the model ID values, not the model instances
+ task_id = offload_task(
+ auto_allocate_sales_order,
+ order_obj.pk,
+ location_id=location.pk if location else None,
+ exclude_location_id=exclude_location.pk if exclude_location else None,
+ shipment_id=shipment.pk if shipment else None,
+ line_ids=[item.pk for item in line_items] if line_items else None,
+ interchangeable=data['interchangeable'],
+ stock_sort_by=data['stock_sort_by'],
+ serialized_stock=data['serialized_stock'],
+ group='sales_order',
+ )
+
+ response = common.serializers.TaskDetailSerializer.from_task(task_id).data
+ return Response(response, status=response['http_status'])
+
+
class SalesOrderAllocationFilter(FilterSet):
"""Custom filterset for the SalesOrderAllocationList endpoint."""
@@ -1296,7 +1345,11 @@ class SalesOrderAllocationOutputOptions(OutputConfiguration):
class SalesOrderAllocationList(
- SalesOrderAllocationMixin, BulkUpdateMixin, OutputOptionsMixin, ListAPI
+ SalesOrderAllocationMixin,
+ BulkDeleteMixin,
+ BulkUpdateMixin,
+ OutputOptionsMixin,
+ ListAPI,
):
"""API endpoint for listing SalesOrderAllocation objects."""
@@ -1304,6 +1357,10 @@ class SalesOrderAllocationList(
filter_backends = SEARCH_ORDER_FILTER
output_options = SalesOrderAllocationOutputOptions
+ def filter_delete_queryset(self, queryset, request):
+ """Prevent deletion of allocations that have already been shipped."""
+ return queryset.filter(shipment__shipment_date__isnull=True)
+
ordering_fields = [
'quantity',
'part',
@@ -1728,7 +1785,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 +1821,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 +2414,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 +2461,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 +2481,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."""
@@ -2047,6 +2635,11 @@ order_api_urls = [
SalesOrderAllocateSerials.as_view(),
name='api-so-allocate-serials',
),
+ path(
+ 'auto-allocate/',
+ SalesOrderAutoAllocate.as_view(),
+ name='api-so-auto-allocate',
+ ),
path('hold/', SalesOrderHold.as_view(), name='api-so-hold'),
path('cancel/', SalesOrderCancel.as_view(), name='api-so-cancel'),
path('issue/', SalesOrderIssue.as_view(), name='api-so-issue'),
@@ -2214,9 +2807,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..ba587a9719 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'])
@@ -1274,6 +1317,18 @@ class PurchaseOrder(TotalPriceMixin, Order):
)
+STOCK_SORT_CHOICES = stock.models.STOCK_SORT_CHOICES
+STOCK_SORT_DEFAULT = stock.models.STOCK_SORT_DEFAULT
+
+SERIALIZED_STOCK_CHOICES = [
+ ('any', _('Allow any stock (serialized or unserialized)')),
+ ('serialized', _('Serialized stock only')),
+ ('unserialized', _('Unserialized stock only')),
+]
+
+SERIALIZED_STOCK_DEFAULT = 'any'
+
+
class SalesOrder(TotalPriceMixin, Order):
"""A SalesOrder represents a list of goods shipped outwards to a customer."""
@@ -1426,6 +1481,130 @@ class SalesOrder(TotalPriceMixin, Order):
"""Return true if any lines in the order are over-allocated."""
return any(line.is_overallocated() for line in self.lines.all())
+ @transaction.atomic
+ def auto_allocate_stock(
+ self,
+ location: Optional[stock.models.StockLocation] = None,
+ exclude_location: Optional[stock.models.StockLocation] = None,
+ shipment: Optional['SalesOrderShipment'] = None,
+ line_ids: Optional[list] = None,
+ **kwargs,
+ ):
+ """Automatically allocate stock items against this SalesOrder.
+
+ For each unallocated line item, finds available stock for
+ the line's part, filtered and sorted according to the supplied kwargs, then
+ creates SalesOrderAllocation records in bulk.
+
+ Arguments:
+ location: If provided, only consider stock within this location tree.
+ exclude_location: If provided, exclude stock within this location tree.
+ shipment: Optional shipment to assign allocations to.
+ line_ids: If provided, only allocate against these specific line item PKs.
+
+ Kwargs:
+ interchangeable (bool): If True (default), consume stock from multiple
+ items/locations to satisfy a line. If False, only allocate when a
+ single item can cover the full remaining quantity.
+ """
+ stock_sort_by = kwargs.get('stock_sort_by', STOCK_SORT_DEFAULT)
+ interchangeable = kwargs.get('interchangeable', True)
+ serialized_stock = kwargs.get('serialized_stock', SERIALIZED_STOCK_DEFAULT)
+
+ new_allocations = []
+
+ lines = self.lines.all()
+ if line_ids:
+ lines = lines.filter(pk__in=line_ids)
+
+ for line_item in lines:
+ if not line_item.part:
+ continue
+
+ if line_item.part.virtual:
+ continue
+
+ unallocated = line_item.quantity - line_item.allocated_quantity()
+
+ if unallocated <= 0:
+ continue
+
+ available_stock = stock.models.StockItem.objects.filter(
+ stock.models.StockItem.IN_STOCK_FILTER, part=line_item.part
+ )
+
+ if location:
+ sublocations = location.get_descendants(include_self=True)
+ available_stock = available_stock.filter(
+ location__in=list(sublocations)
+ )
+
+ if exclude_location:
+ sublocations = exclude_location.get_descendants(include_self=True)
+ available_stock = available_stock.exclude(
+ location__in=list(sublocations)
+ )
+
+ if serialized_stock == 'serialized':
+ available_stock = available_stock.filter(
+ serial__isnull=False, quantity=1
+ ).exclude(serial='')
+ elif serialized_stock == 'unserialized':
+ available_stock = available_stock.filter(
+ Q(serial__isnull=True) | Q(serial='')
+ )
+
+ # Handle NULL expiry_date last when sorting by expiry.
+ if stock_sort_by == stock.models.StockSortOrder.EXPIRY_SOONEST:
+ available_stock = available_stock.order_by(
+ F('expiry_date').asc(nulls_last=True)
+ )
+ else:
+ available_stock = available_stock.order_by(stock_sort_by)
+
+ stock_count = available_stock.count()
+
+ if stock_count == 0:
+ continue
+
+ if not interchangeable and stock_count > 1:
+ # Only allocate when a single item can fully cover the requirement.
+ single = next(
+ (
+ s
+ for s in available_stock
+ if s.unallocated_quantity() >= unallocated
+ ),
+ None,
+ )
+ if single is None:
+ continue
+ available_stock = [single]
+
+ for stock_item in available_stock:
+ available_qty = stock_item.unallocated_quantity()
+
+ if available_qty <= 0:
+ continue
+
+ quantity = min(unallocated, available_qty)
+
+ new_allocations.append(
+ SalesOrderAllocation(
+ line=line_item,
+ item=stock_item,
+ quantity=quantity,
+ shipment=shipment,
+ )
+ )
+
+ unallocated -= quantity
+
+ if unallocated <= 0:
+ break
+
+ SalesOrderAllocation.objects.bulk_create(new_allocations, batch_size=250)
+
def is_completed(self) -> bool:
"""Check if this order is "shipped" (all line items delivered).
@@ -1751,6 +1930,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 +1955,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 +2005,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 +2130,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 +2152,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 +3330,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 +3987,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..81c2a95fec 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):
@@ -1969,6 +1990,113 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer):
allocation.save()
+class SalesOrderAutoAllocationSerializer(serializers.Serializer):
+ """DRF serializer for auto-allocating stock items against a SalesOrder."""
+
+ class Meta:
+ """Serializer metaclass."""
+
+ fields = [
+ 'location',
+ 'exclude_location',
+ 'shipment',
+ 'interchangeable',
+ 'stock_sort_by',
+ 'serialized_stock',
+ 'line_items',
+ ]
+
+ location = serializers.PrimaryKeyRelatedField(
+ queryset=stock.models.StockLocation.objects.all(),
+ many=False,
+ allow_null=True,
+ required=False,
+ label=_('Source Location'),
+ help_text=_(
+ 'Stock location where items are sourced (leave blank to use any location)'
+ ),
+ )
+
+ exclude_location = serializers.PrimaryKeyRelatedField(
+ queryset=stock.models.StockLocation.objects.all(),
+ many=False,
+ allow_null=True,
+ required=False,
+ label=_('Exclude Location'),
+ help_text=_('Exclude stock items from this location'),
+ )
+
+ shipment = serializers.PrimaryKeyRelatedField(
+ queryset=order.models.SalesOrderShipment.objects.all(),
+ many=False,
+ allow_null=True,
+ required=False,
+ label=_('Shipment'),
+ help_text=_('Assign allocations to this shipment'),
+ )
+
+ interchangeable = serializers.BooleanField(
+ default=True,
+ label=_('Interchangeable Stock'),
+ help_text=_(
+ 'Allow stock to be taken from multiple locations to fulfil a single line item'
+ ),
+ )
+
+ stock_sort_by = serializers.ChoiceField(
+ default=stock.models.STOCK_SORT_DEFAULT,
+ choices=stock.models.STOCK_SORT_CHOICES,
+ label=_('Stock Priority'),
+ help_text=_('Preferred order in which matching stock items are consumed'),
+ )
+
+ serialized_stock = serializers.ChoiceField(
+ default=order.models.SERIALIZED_STOCK_DEFAULT,
+ choices=order.models.SERIALIZED_STOCK_CHOICES,
+ label=_('Serialized Stock'),
+ help_text=_(
+ 'Control whether serialized stock items are included in auto-allocation'
+ ),
+ )
+
+ line_items = serializers.PrimaryKeyRelatedField(
+ queryset=order.models.SalesOrderLineItem.objects.all(),
+ many=True,
+ required=False,
+ default=list,
+ label=_('Line Items'),
+ help_text=_(
+ 'Limit allocation to these line items (leave blank to allocate all lines)'
+ ),
+ )
+
+ def validate_shipment(self, shipment):
+ """Validate that the shipment belongs to this order and is not yet shipped."""
+ order_obj = self.context.get('order')
+
+ if shipment is None:
+ return shipment
+
+ if shipment.shipment_date is not None:
+ raise ValidationError(_('Shipment has already been shipped'))
+
+ if order_obj and shipment.order != order_obj:
+ raise ValidationError(_('Shipment is not associated with this order'))
+
+ return shipment
+
+ def validate_line_items(self, line_items):
+ """Validate that all provided line items belong to this order."""
+ order_obj = self.context.get('order')
+
+ if order_obj and line_items:
+ for line in line_items:
+ if line.order != order_obj:
+ raise ValidationError(_('Line item does not belong to this order'))
+
+ return line_items
+
+
@register_importer()
class SalesOrderExtraLineSerializer(
AbstractExtraLineSerializer, InvenTreeModelSerializer
@@ -2278,3 +2406,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/tasks.py b/src/backend/InvenTree/order/tasks.py
index d9065c2d20..8950b089a5 100644
--- a/src/backend/InvenTree/order/tasks.py
+++ b/src/backend/InvenTree/order/tasks.py
@@ -14,6 +14,7 @@ from opentelemetry import trace
import common.notifications
import InvenTree.helpers_model
import order.models
+import stock.models as stock_models
from InvenTree.tasks import ScheduledTask, scheduled_task
from order.events import PurchaseOrderEvents, SalesOrderEvents
from order.status_codes import (
@@ -273,3 +274,38 @@ def complete_sales_order_shipment(
# Trigger event signalling that the shipment has been completed
trigger_event(SalesOrderEvents.SHIPMENT_COMPLETE, id=shipment.pk)
+
+
+@tracer.start_as_current_span('auto_allocate_sales_order')
+def auto_allocate_sales_order(
+ order_id: int,
+ location_id: Optional[int] = None,
+ exclude_location_id: Optional[int] = None,
+ shipment_id: Optional[int] = None,
+ line_ids: Optional[list] = None,
+ **kwargs,
+):
+ """Run auto-allocation for a specified SalesOrder."""
+ sales_order = order.models.SalesOrder.objects.get(pk=order_id)
+
+ location = (
+ stock_models.StockLocation.objects.get(pk=location_id) if location_id else None
+ )
+ exclude_location = (
+ stock_models.StockLocation.objects.get(pk=exclude_location_id)
+ if exclude_location_id
+ else None
+ )
+ shipment = (
+ order.models.SalesOrderShipment.objects.get(pk=shipment_id)
+ if shipment_id
+ else None
+ )
+
+ sales_order.auto_allocate_stock(
+ location=location,
+ exclude_location=exclude_location,
+ shipment=shipment,
+ line_ids=line_ids or None,
+ **kwargs,
+ )
diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py
index 7996301b1d..5f686d6b5f 100644
--- a/src/backend/InvenTree/order/test_api.py
+++ b/src/backend/InvenTree/order/test_api.py
@@ -21,15 +21,18 @@ from common.settings import set_global_setting
from company.models import Company, SupplierPart, SupplierPriceBreak
from InvenTree.unit_test import InvenTreeAPITestCase
from order import models
+from order.models import SalesOrderAllocation, SalesOrderLineItem, SalesOrderShipment
from order.status_codes import (
PurchaseOrderStatus,
ReturnOrderLineStatus,
ReturnOrderStatus,
SalesOrderStatus,
SalesOrderStatusGroups,
+ TransferOrderStatus,
+ TransferOrderStatusGroups,
)
from part.models import Part
-from stock.models import StockItem, StockLocation
+from stock.models import StockItem, StockLocation, StockSortOrder
from stock.status_codes import StockStatus
from users.models import Owner
@@ -46,9 +49,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."""
@@ -1138,6 +1142,10 @@ class PurchaseOrderReceiveTest(OrderTest):
self.assertEqual(stock_1.last().expiry_date, one_week_from_today)
self.assertEqual(stock_2.last().expiry_date, one_week_from_today)
+ # creation_date must be populated on both received items
+ self.assertIsNotNone(stock_1.last().creation_date)
+ self.assertIsNotNone(stock_2.last().creation_date)
+
# Barcodes should have been assigned to the stock items
self.assertTrue(
StockItem.objects.filter(barcode_data='MY-UNIQUE-BARCODE-123').exists()
@@ -1214,6 +1222,7 @@ class PurchaseOrderReceiveTest(OrderTest):
self.assertEqual(item.serial, str(i))
self.assertEqual(item.quantity, 1)
self.assertEqual(item.batch, 'B-abc-123')
+ self.assertIsNotNone(item.creation_date)
# A single stock item (quantity 10) created for the second line item
items = StockItem.objects.filter(supplier_part=line_2.part)
@@ -2404,6 +2413,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 +2901,1222 @@ 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,
+ )
+
+
+class SalesOrderAutoAllocateAPITest(InvenTreeAPITestCase):
+ """API integration tests for the SalesOrder auto-allocate endpoint."""
+
+ fixtures = ['company', 'users']
+
+ roles = ['sales_order.add', 'sales_order.change', 'sales_order.delete']
+
+ @classmethod
+ def setUpTestData(cls):
+ """Create shared order, parts, locations and stock for all tests."""
+ super().setUpTestData()
+
+ cls.customer = Company.objects.create(
+ name='Test Customer', is_customer=True, description=''
+ )
+ cls.part = Part.objects.create(
+ name='AutoAlloc Part', salable=True, description=''
+ )
+
+ cls.loc_a = StockLocation.objects.create(name='Shelf A')
+ cls.loc_b = StockLocation.objects.create(name='Shelf B')
+
+ def _make_order(self, qty=50):
+ """Create a fresh SalesOrder with one line item and one shipment."""
+ order = models.SalesOrder.objects.create(
+ customer=self.customer,
+ reference=f'SO-TEST-{models.SalesOrder.objects.count()}',
+ )
+ line = SalesOrderLineItem.objects.create(
+ order=order, part=self.part, quantity=qty
+ )
+ shipment = SalesOrderShipment.objects.create(order=order)
+ return order, line, shipment
+
+ def _url(self, pk):
+ return reverse('api-so-auto-allocate', kwargs={'pk': pk})
+
+ # ------------------------------------------------------------------
+ # Permission and basic response tests
+ # ------------------------------------------------------------------
+
+ def test_requires_authentication(self):
+ """POST without authentication returns 401."""
+ self.client.logout()
+ order, _, _ = self._make_order()
+ self.post(self._url(order.pk), {}, expected_code=401)
+
+ def test_basic_post_returns_200(self):
+ """POST with defaults runs synchronously in tests and returns 200."""
+ order, line, _ = self._make_order()
+ StockItem.objects.create(part=self.part, quantity=100)
+
+ response = self.post(self._url(order.pk), {}, expected_code=200)
+
+ self.assertIn('task_id', response.data)
+ self.assertTrue(response.data['complete'])
+ self.assertTrue(response.data['success'])
+
+ # Task ran synchronously — allocations are already committed
+ self.assertTrue(line.is_fully_allocated())
+
+ def test_invalid_order_pk_returns_404(self):
+ """POST to a non-existent order pk returns 404."""
+ self.post(self._url(999999), {}, expected_code=404)
+
+ # ------------------------------------------------------------------
+ # Field validation
+ # ------------------------------------------------------------------
+
+ def test_invalid_stock_sort_by_rejected(self):
+ """An unrecognised stock_sort_by value is rejected with 400."""
+ order, _, _ = self._make_order()
+ self.post(
+ self._url(order.pk),
+ {'stock_sort_by': 'not_a_valid_sort'},
+ expected_code=400,
+ )
+
+ def test_invalid_serialized_stock_rejected(self):
+ """An unrecognised serialized_stock value is rejected with 400."""
+ order, _, _ = self._make_order()
+ self.post(self._url(order.pk), {'serialized_stock': 'maybe'}, expected_code=400)
+
+ def test_shipment_from_another_order_rejected(self):
+ """A shipment that belongs to a different order is rejected with 400."""
+ order, _, _ = self._make_order()
+ _other_order, _, other_shipment = self._make_order()
+
+ self.post(
+ self._url(order.pk), {'shipment': other_shipment.pk}, expected_code=400
+ )
+
+ def test_shipped_shipment_rejected(self):
+ """A shipment that has already been marked as shipped is rejected with 400."""
+ from datetime import date
+
+ order, _, shipment = self._make_order()
+ shipment.shipment_date = date.today()
+ shipment.save()
+
+ self.post(self._url(order.pk), {'shipment': shipment.pk}, expected_code=400)
+
+ def test_line_items_from_another_order_rejected(self):
+ """line_items belonging to a different order are rejected with 400."""
+ order, _, _ = self._make_order()
+ _, other_line, _ = self._make_order()
+
+ self.post(
+ self._url(order.pk), {'line_items': [other_line.pk]}, expected_code=400
+ )
+
+ # ------------------------------------------------------------------
+ # Allocation behaviour
+ # ------------------------------------------------------------------
+
+ def test_allocates_available_stock(self):
+ """Stock is allocated to the line item after a successful POST."""
+ order, line, _ = self._make_order(qty=30)
+ item = StockItem.objects.create(part=self.part, quantity=100)
+
+ self.post(self._url(order.pk), {}, expected_code=200)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item, item)
+ self.assertEqual(allocs.first().quantity, 30)
+
+ def test_line_items_subset_only_allocates_selected_lines(self):
+ """When line_items is specified only those lines are allocated."""
+ order = models.SalesOrder.objects.create(
+ customer=self.customer,
+ reference=f'SO-SUBSET-{models.SalesOrder.objects.count()}',
+ )
+ line_a = SalesOrderLineItem.objects.create(
+ order=order, part=self.part, quantity=10
+ )
+ part_b = Part.objects.create(name='Part B', salable=True, description='')
+ line_b = SalesOrderLineItem.objects.create(
+ order=order, part=part_b, quantity=10
+ )
+
+ StockItem.objects.create(part=self.part, quantity=50)
+ StockItem.objects.create(part=part_b, quantity=50)
+
+ self.post(self._url(order.pk), {'line_items': [line_a.pk]}, expected_code=200)
+
+ self.assertTrue(line_a.is_fully_allocated())
+ self.assertFalse(line_b.is_fully_allocated())
+
+ def test_serialized_stock_only(self):
+ """serialized_stock='serialized' allocates only serialized items."""
+ order, line, _ = self._make_order(qty=1)
+ # Unserialized item
+ StockItem.objects.create(part=self.part, quantity=50)
+ # Serialized item
+ serial_item = StockItem.objects.create(
+ part=self.part, quantity=1, serial='SN-001'
+ )
+
+ self.post(
+ self._url(order.pk), {'serialized_stock': 'serialized'}, expected_code=200
+ )
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item, serial_item)
+
+ def test_unserialized_stock_only(self):
+ """serialized_stock='unserialized' skips serialized items."""
+ order, line, _ = self._make_order(qty=10)
+ # Serialized items only
+ for sn in range(10):
+ StockItem.objects.create(part=self.part, quantity=1, serial=f'SN-{sn}')
+
+ self.post(
+ self._url(order.pk), {'serialized_stock': 'unserialized'}, expected_code=200
+ )
+
+ self.assertFalse(line.is_fully_allocated())
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 0)
+
+ def test_stock_sort_by_quantity_asc(self):
+ """stock_sort_by=QUANTITY_ASC consumes the smallest lot first."""
+ order, line, _ = self._make_order(qty=15)
+ small = StockItem.objects.create(part=self.part, quantity=5)
+ StockItem.objects.create(part=self.part, quantity=100)
+
+ self.post(
+ self._url(order.pk),
+ {
+ 'stock_sort_by': str(StockSortOrder.QUANTITY_ASC),
+ 'interchangeable': True,
+ },
+ expected_code=200,
+ )
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(any(a.item == small and a.quantity == 5 for a in allocs))
+
+ def test_stock_sort_by_quantity_desc(self):
+ """stock_sort_by=QUANTITY_DESC consumes the largest lot first, covering the requirement in one allocation."""
+ order, line, _ = self._make_order(qty=15)
+ StockItem.objects.create(part=self.part, quantity=5)
+ StockItem.objects.create(part=self.part, quantity=100)
+
+ self.post(
+ self._url(order.pk),
+ {
+ 'stock_sort_by': str(StockSortOrder.QUANTITY_DESC),
+ 'interchangeable': True,
+ },
+ expected_code=200,
+ )
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().quantity, 15)
+
+ def test_location_filter(self):
+ """Only stock within the specified location is used."""
+ order, line, _ = self._make_order(qty=10)
+ StockItem.objects.create(part=self.part, quantity=50, location=self.loc_a)
+ StockItem.objects.create(part=self.part, quantity=50, location=self.loc_b)
+
+ self.post(self._url(order.pk), {'location': self.loc_a.pk}, expected_code=200)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item.location, self.loc_a)
+
+ def test_exclude_location_filter(self):
+ """Stock in the excluded location is not used."""
+ order, line, _ = self._make_order(qty=10)
+ StockItem.objects.create(part=self.part, quantity=50, location=self.loc_a)
+ StockItem.objects.create(part=self.part, quantity=50, location=self.loc_b)
+
+ self.post(
+ self._url(order.pk), {'exclude_location': self.loc_a.pk}, expected_code=200
+ )
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item.location, self.loc_b)
+
+ def test_shipment_assigned_to_allocations(self):
+ """When a shipment is specified, all allocations are assigned to it."""
+ order, line, shipment = self._make_order(qty=20)
+ StockItem.objects.create(part=self.part, quantity=100)
+
+ self.post(self._url(order.pk), {'shipment': shipment.pk}, expected_code=200)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ for alloc in allocs:
+ self.assertEqual(alloc.shipment, shipment)
+
+ def test_interchangeable_false_skips_split_stock(self):
+ """With interchangeable=False, allocation is skipped when no single item covers the full quantity."""
+ order, line, _ = self._make_order(qty=50)
+ StockItem.objects.create(part=self.part, quantity=20)
+ StockItem.objects.create(part=self.part, quantity=20)
+
+ self.post(self._url(order.pk), {'interchangeable': False}, expected_code=200)
+
+ self.assertFalse(line.is_fully_allocated())
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 0)
+
+
+class SalesOrderAllocationBulkDeleteAPITest(InvenTreeAPITestCase):
+ """API integration tests for bulk-delete of SalesOrderAllocation, verifying shipped allocations are protected."""
+
+ fixtures = ['company', 'users']
+
+ roles = ['sales_order.add', 'sales_order.change', 'sales_order.delete']
+
+ @classmethod
+ def setUpTestData(cls):
+ """Create shared order, part and stock for all tests."""
+ super().setUpTestData()
+
+ cls.customer = models.Company.objects.create(
+ name='BulkDelete Customer', is_customer=True, description=''
+ )
+ cls.part = Part.objects.create(
+ name='BulkDelete Part', salable=True, description=''
+ )
+
+ def _make_order_with_allocations(self, n_unshipped=2, n_shipped=1):
+ """Return (order, unshipped_allocations, shipped_allocations)."""
+ order = models.SalesOrder.objects.create(
+ customer=self.customer,
+ reference=f'SO-BD-{models.SalesOrder.objects.count()}',
+ )
+ line = SalesOrderLineItem.objects.create(
+ order=order, part=self.part, quantity=100
+ )
+ unshipped_shipment = models.SalesOrderShipment.objects.create(
+ order=order, reference='1'
+ )
+
+ shipped_shipment = models.SalesOrderShipment.objects.create(
+ order=order, reference='2'
+ )
+ shipped_shipment.shipment_date = date.today()
+ shipped_shipment.save()
+
+ unshipped = []
+ for _ in range(n_unshipped):
+ item = StockItem.objects.create(part=self.part, quantity=10)
+ alloc = SalesOrderAllocation.objects.create(
+ line=line, item=item, quantity=10, shipment=unshipped_shipment
+ )
+ unshipped.append(alloc)
+
+ shipped = []
+ for _ in range(n_shipped):
+ item = StockItem.objects.create(part=self.part, quantity=10)
+ alloc = SalesOrderAllocation.objects.create(
+ line=line, item=item, quantity=10, shipment=shipped_shipment
+ )
+ shipped.append(alloc)
+
+ return order, unshipped, shipped
+
+ def _url(self):
+ return reverse('api-so-allocation-list')
+
+ # ------------------------------------------------------------------
+ # Basic bulk-delete
+ # ------------------------------------------------------------------
+
+ def test_bulk_delete_unshipped_allocations(self):
+ """Unshipped allocations can be bulk-deleted."""
+ _, unshipped, _ = self._make_order_with_allocations(n_unshipped=2, n_shipped=0)
+ ids = [a.pk for a in unshipped]
+
+ self.delete(self._url(), {'items': ids}, expected_code=200)
+
+ self.assertFalse(SalesOrderAllocation.objects.filter(pk__in=ids).exists())
+
+ # ------------------------------------------------------------------
+ # Shipped allocation protection
+ # ------------------------------------------------------------------
+
+ def test_shipped_allocations_are_not_deleted(self):
+ """Shipped allocations are silently skipped when included in a bulk-delete request."""
+ _, _, shipped = self._make_order_with_allocations(n_unshipped=0, n_shipped=2)
+ ids = [a.pk for a in shipped]
+
+ self.delete(self._url(), {'items': ids}, expected_code=200)
+
+ # All shipped allocations should still exist
+ self.assertEqual(SalesOrderAllocation.objects.filter(pk__in=ids).count(), 2)
+
+ def test_mixed_delete_removes_only_unshipped(self):
+ """A bulk-delete of mixed shipped/unshipped allocations removes only the unshipped ones."""
+ _, unshipped, shipped = self._make_order_with_allocations(
+ n_unshipped=2, n_shipped=2
+ )
+ all_ids = [a.pk for a in unshipped] + [a.pk for a in shipped]
+
+ self.delete(self._url(), {'items': all_ids}, expected_code=200)
+
+ # Unshipped should be gone
+ for alloc in unshipped:
+ self.assertFalse(SalesOrderAllocation.objects.filter(pk=alloc.pk).exists())
+
+ # Shipped should remain
+ shipped_ids = [a.pk for a in shipped]
+ self.assertEqual(
+ SalesOrderAllocation.objects.filter(pk__in=shipped_ids).count(), 2
+ )
diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py
index 0186cfd90c..5e078fa1c5 100644
--- a/src/backend/InvenTree/order/test_sales_order.py
+++ b/src/backend/InvenTree/order/test_sales_order.py
@@ -5,6 +5,7 @@ from datetime import datetime, timedelta
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.core.exceptions import ValidationError
+from django.db.models import Sum
import order.tasks
from common.models import InvenTreeSetting, NotificationMessage
@@ -20,7 +21,7 @@ from order.models import (
SalesOrderShipment,
)
from part.models import Part
-from stock.models import StockItem
+from stock.models import StockItem, StockLocation
from users.models import Owner
@@ -619,3 +620,231 @@ class SalesOrderTest(InvenTreeTestCase):
# Ensure that virtual line item quantity values have been updated
for line in so.lines.all():
self.assertEqual(line.shipped, line.quantity)
+
+
+class SalesOrderAutoAllocateTest(InvenTreeTestCase):
+ """Tests for SalesOrder.auto_allocate_stock()."""
+
+ fixtures = ['company', 'users']
+
+ @classmethod
+ def setUpTestData(cls):
+ """Create a basic order, line items, and stock items for each test."""
+ cls.customer = Company.objects.create(
+ name='Auto Alloc Co', description='', is_customer=True
+ )
+ cls.part = Part.objects.create(
+ name='Widget', salable=True, description='A salable widget'
+ )
+ cls.virtual_part = Part.objects.create(
+ name='Virtual Widget',
+ salable=True,
+ virtual=True,
+ description='A virtual part',
+ )
+
+ cls.loc_a = StockLocation.objects.create(name='Shelf A')
+ cls.loc_b = StockLocation.objects.create(name='Shelf B', parent=cls.loc_a)
+
+ def _make_order(self, qty=50):
+ order = SalesOrder.objects.create(customer=self.customer)
+ line = SalesOrderLineItem.objects.create(
+ order=order, part=self.part, quantity=qty
+ )
+ shipment = SalesOrderShipment.objects.create(order=order)
+ return order, line, shipment
+
+ def test_allocates_single_item(self):
+ """A single stock item that covers the full quantity is fully allocated."""
+ order, line, _ = self._make_order(qty=30)
+ stock = StockItem.objects.create(part=self.part, quantity=100)
+
+ order.auto_allocate_stock()
+
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 1)
+ alloc = SalesOrderAllocation.objects.get(line=line)
+ self.assertEqual(alloc.item, stock)
+ self.assertEqual(alloc.quantity, 30)
+ self.assertTrue(line.is_fully_allocated())
+
+ def test_interchangeable_consumes_multiple_items(self):
+ """With interchangeable=True (default), multiple stock items are consumed."""
+ order, line, _ = self._make_order(qty=50)
+ StockItem.objects.create(part=self.part, quantity=20)
+ StockItem.objects.create(part=self.part, quantity=40)
+
+ order.auto_allocate_stock(interchangeable=True)
+
+ total = SalesOrderAllocation.objects.filter(line=line).aggregate(
+ t=Sum('quantity')
+ )['t']
+ self.assertEqual(total, 50)
+ self.assertTrue(line.is_fully_allocated())
+
+ def test_not_interchangeable_skips_split_stock(self):
+ """With interchangeable=False, allocation is skipped when stock is split."""
+ order, line, _ = self._make_order(qty=50)
+ StockItem.objects.create(part=self.part, quantity=20)
+ StockItem.objects.create(part=self.part, quantity=20)
+
+ order.auto_allocate_stock(interchangeable=False)
+
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 0)
+ self.assertFalse(line.is_fully_allocated())
+
+ def test_not_interchangeable_uses_single_sufficient_item(self):
+ """With interchangeable=False, a single item that covers the full qty is used."""
+ order, line, _ = self._make_order(qty=30)
+ StockItem.objects.create(part=self.part, quantity=10)
+ StockItem.objects.create(part=self.part, quantity=50)
+
+ order.auto_allocate_stock(interchangeable=False)
+
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 1)
+ alloc = SalesOrderAllocation.objects.get(line=line)
+ self.assertEqual(alloc.quantity, 30)
+
+ def test_location_filter(self):
+ """Only stock within the specified location tree is considered."""
+ order, line, _ = self._make_order(qty=10)
+ StockItem.objects.create(part=self.part, quantity=100, location=self.loc_a)
+ StockItem.objects.create(part=self.part, quantity=100) # no location
+
+ order.auto_allocate_stock(location=self.loc_a)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ for alloc in allocs:
+ self.assertEqual(alloc.item.location, self.loc_a)
+
+ def test_exclude_location_filter(self):
+ """Stock within the excluded location tree is not used."""
+ order, line, _ = self._make_order(qty=10)
+ excluded = StockItem.objects.create(
+ part=self.part, quantity=100, location=self.loc_a
+ )
+ included = StockItem.objects.create(part=self.part, quantity=100)
+
+ order.auto_allocate_stock(exclude_location=self.loc_a)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ allocated_items = [a.item for a in allocs]
+ self.assertNotIn(excluded, allocated_items)
+ self.assertIn(included, allocated_items)
+
+ def test_skips_fully_allocated_lines(self):
+ """Lines that are already fully allocated are not touched."""
+ order, line, shipment = self._make_order(qty=10)
+ existing = StockItem.objects.create(part=self.part, quantity=100)
+ SalesOrderAllocation.objects.create(
+ line=line, item=existing, quantity=10, shipment=shipment
+ )
+ self.assertTrue(line.is_fully_allocated())
+
+ order.auto_allocate_stock()
+
+ self.assertEqual(SalesOrderAllocation.objects.filter(line=line).count(), 1)
+
+ def test_skips_virtual_parts(self):
+ """Line items for virtual parts are skipped (virtual parts cannot hold stock)."""
+ order = SalesOrder.objects.create(customer=self.customer)
+ virtual_line = SalesOrderLineItem.objects.create(
+ order=order, part=self.virtual_part, quantity=5
+ )
+
+ order.auto_allocate_stock()
+
+ self.assertEqual(
+ SalesOrderAllocation.objects.filter(line=virtual_line).count(), 0
+ )
+ # Virtual parts are considered fully allocated without any stock
+ self.assertTrue(virtual_line.is_fully_allocated())
+
+ def test_allocates_serialized_stock(self):
+ """Serialized stock items are included in auto-allocation."""
+ order, line, _ = self._make_order(qty=1)
+ serialized = StockItem.objects.create(
+ part=self.part, quantity=1, serial='SN001'
+ )
+
+ order.auto_allocate_stock()
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item, serialized)
+ self.assertTrue(line.is_fully_allocated())
+
+ def test_shipment_assigned(self):
+ """Allocations are assigned to the provided shipment."""
+ order, line, shipment = self._make_order(qty=10)
+ StockItem.objects.create(part=self.part, quantity=50)
+
+ order.auto_allocate_stock(shipment=shipment)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ for alloc in allocs:
+ self.assertEqual(alloc.shipment, shipment)
+
+ def test_sort_quantity_asc(self):
+ """quantity_asc sort consumes smallest lots first."""
+ order, line, _ = self._make_order(qty=15)
+ small = StockItem.objects.create(part=self.part, quantity=5)
+ StockItem.objects.create(part=self.part, quantity=100)
+
+ order.auto_allocate_stock(stock_sort_by='quantity', interchangeable=True)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line).order_by('quantity')
+ self.assertTrue(allocs.exists())
+ # Small lot should be fully consumed
+ self.assertTrue(any(a.item == small and a.quantity == 5 for a in allocs))
+
+ def test_sort_quantity_desc(self):
+ """quantity_desc sort consumes largest lots first."""
+ order, line, _ = self._make_order(qty=15)
+ StockItem.objects.create(part=self.part, quantity=5)
+ large = StockItem.objects.create(part=self.part, quantity=100)
+
+ order.auto_allocate_stock(stock_sort_by='-quantity', interchangeable=True)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ # Large lot should be the first consumed (fully covers 15)
+ self.assertEqual(allocs.count(), 1)
+ self.assertEqual(allocs.first().item, large)
+
+ def test_task_resolves_pk_params(self):
+ """auto_allocate_sales_order task resolves location/shipment pks to instances."""
+ from order.tasks import auto_allocate_sales_order
+
+ order, line, shipment = self._make_order(qty=10)
+ StockItem.objects.create(part=self.part, quantity=50, location=self.loc_a)
+
+ auto_allocate_sales_order(
+ order.pk, location_id=self.loc_a.pk, shipment_id=shipment.pk
+ )
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ for alloc in allocs:
+ self.assertEqual(alloc.shipment, shipment)
+ self.assertEqual(alloc.item.location, self.loc_a)
+
+ def test_task_exclude_location_pk(self):
+ """auto_allocate_sales_order respects exclude_location_id parameter."""
+ from order.tasks import auto_allocate_sales_order
+
+ order, line, _ = self._make_order(qty=10)
+ excluded = StockItem.objects.create(
+ part=self.part, quantity=50, location=self.loc_a
+ )
+ included = StockItem.objects.create(part=self.part, quantity=50)
+
+ auto_allocate_sales_order(order.pk, exclude_location_id=self.loc_a.pk)
+
+ allocs = SalesOrderAllocation.objects.filter(line=line)
+ self.assertTrue(allocs.exists())
+ allocated_items = [a.item for a in allocs]
+ self.assertNotIn(excluded, allocated_items)
+ self.assertIn(included, allocated_items)
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 dbf8cf815a..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,6 +602,7 @@ class PartValidateBOM(RetrieveUpdateAPI):
queryset = Part.objects.all()
serializer_class = part_serializers.PartBomValidateSerializer
+ role_required = 'bom'
@extend_schema(
responses={
@@ -609,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()
@@ -728,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')
@@ -1056,6 +1077,7 @@ class PartList(
filter_backends = SEARCH_ORDER_FILTER
ordering_fields = [
+ 'id',
'name',
'creation_date',
'IPN',
@@ -1288,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'
@@ -1404,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 92887e57c8..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:
@@ -171,7 +175,14 @@ def annotate_build_order_requirements(reference: str = '') -> QuerySet:
build_filter = Q(build__status__in=BuildStatusGroups.ACTIVE_CODES)
return Coalesce(
- SubquerySum(f'{reference}used_in__build_lines__quantity', filter=build_filter),
+ SubquerySum(
+ ExpressionWrapper(
+ F(f'{reference}used_in__build_lines__quantity')
+ - F(f'{reference}used_in__build_lines__consumed'),
+ output_field=DecimalField(),
+ ),
+ filter=build_filter,
+ ),
Decimal(0),
output_field=models.DecimalField(),
)
@@ -267,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
new file mode 100644
index 0000000000..995e064556
--- /dev/null
+++ b/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py
@@ -0,0 +1,44 @@
+# Generated by Django 5.2.13 on 2026-04-27 22:33
+
+from django.db import migrations
+
+
+def update_bom_role(apps, schema_editor):
+ """Update the ruleset for the BOM role.
+
+ As the 'bom' role was previously covered by the 'part' role,
+ we need to update the ruleset to include the correct models.
+
+ """
+ from users.ruleset import RuleSetEnum
+
+ 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():
+ # Find a matching 'part' ruleset for this group
+ if ruleset := RuleSet.objects.filter(name=RuleSetEnum.PART, group=group).first():
+ # A 'part' ruleset exists for this group - create a new 'bom' ruleset based on this
+ ruleset.pk = None # Create a new instance
+ ruleset.name = RuleSetEnum.BOM
+ ruleset.save()
+
+ else:
+ # No 'part' ruleset exists for this group - create a default 'bom' ruleset
+ RuleSet.objects.create(
+ name=RuleSetEnum.BOM,
+ group=group
+ )
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("part", "0147_remove_part_default_supplier"),
+ ("users", "0014_userprofile")
+ ]
+
+ operations = [
+ migrations.RunPython(update_bom_role, reverse_code=migrations.RunPython.noop),
+ ]
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 a9109c0174..48b0bb0399 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?
@@ -569,13 +570,13 @@ class Part(
}
def check_parameter_delete(self, parameter):
- """Custom delete check for Paramteter instances associated with this Part."""
- if self.locked:
+ """Custom delete check for Parameter instances associated with this Part."""
+ if self.locked and get_global_setting('PART_ENABLE_LOCKING'):
raise ValidationError(_('Cannot delete parameters of a locked part'))
def check_parameter_save(self, parameter):
"""Custom save check for Parameter instances associated with this Part."""
- if self.locked:
+ if self.locked and get_global_setting('PART_ENABLE_LOCKING'):
raise ValidationError(_('Cannot modify parameters of a locked part'))
def delete(self, **kwargs):
@@ -586,7 +587,7 @@ class Part(
- The part is still active
- The part is used in a BOM for a different part.
"""
- if self.locked:
+ if self.locked and get_global_setting('PART_ENABLE_LOCKING'):
raise ValidationError(_('Cannot delete this part as it is locked'))
if self.active:
@@ -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):
@@ -2478,6 +2533,7 @@ class Part(
category__in=categories
).order_by('-category__level')
+ template_ids = set()
parameters = []
content_type = ContentType.objects.get_for_model(Part)
@@ -2488,6 +2544,12 @@ class Part(
).exists():
continue
+ # Ensure we do not create duplicate parameters if multiple categories have the same template
+ if category_template.template.pk in template_ids:
+ continue
+
+ template_ids.add(category_template.template.pk)
+
parameters.append(
Parameter(
template=category_template.template,
@@ -2497,8 +2559,7 @@ class Part(
)
)
- if len(parameters) > 0:
- Parameter.objects.bulk_create(parameters)
+ Parameter.objects.bulk_create(parameters, batch_size=250)
def getTestTemplates(
self, required=None, include_parent: bool = True, enabled=None
@@ -2630,9 +2691,7 @@ class Part(
parts = []
# Child parts
- children = self.get_descendants(include_self=False)
-
- for child in children:
+ for child in self.get_descendants(include_self=False):
parts.append(child)
# Immediate parent, and siblings
@@ -3778,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)
@@ -3880,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
@@ -3951,7 +4066,8 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel):
Raises:
ValidationError: If the assembly is locked
"""
- # TODO: Perhaps control this with a global setting?
+ if not get_global_setting('PART_ENABLE_LOCKING'):
+ return
if assembly.locked:
raise ValidationError(_('BOM item cannot be modified - assembly is locked'))
@@ -3986,7 +4102,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,
@@ -4172,10 +4296,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 da8bada994..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,12 +982,14 @@ 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}
# Initially, there are no parts with a valid BOM
- response = self.get(url, filters)
+ response = self.get(url, filters, expected_code=200)
self.assertEqual(len(response.data), 0)
@@ -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)
@@ -1038,6 +1017,14 @@ class PartAPITest(PartAPITestBase):
# Test the BOM validation API endpoint
bom_url = reverse('api-part-bom-validate', kwargs={'pk': assembly.pk})
+
+ # Initially, we do not have the required role permissions
+ self.get(bom_url, expected_code=403)
+
+ # Add required role
+ self.assignRole('bom.add')
+
+ # Now we should be able to validate the BOM via the API
data = self.get(bom_url, expected_code=200).data
self.assertEqual(data['bom_validated'], True)
@@ -1046,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
@@ -2639,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."""
@@ -2788,6 +2827,7 @@ class BomItemTest(InvenTreeAPITestCase):
'rounding_multiple',
'pk',
'part',
+ 'raw_amount',
'quantity',
'reference',
'sub_part',
@@ -2813,6 +2853,7 @@ class BomItemTest(InvenTreeAPITestCase):
# Increase the quantity
data = response.data
+ del data['raw_amount']
data['quantity'] = 57
data['note'] = 'Added a note'
@@ -2821,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(
@@ -2838,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."""
@@ -2913,6 +3005,12 @@ class BomItemTest(InvenTreeAPITestCase):
# Count first, operate directly on Model
countbefore = BomItemSubstitute.objects.count()
+ # Initially, the user does not have the required permissions
+ self.get(url, expected_code=403)
+
+ # Assign the permission to view the substitute list
+ self.assignRole('bom.add')
+
# Now, make sure API returns the same count
response = self.get(url, expected_code=200)
self.assertEqual(len(response.data), countbefore)
diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py
index d2e8d91b91..13bebc5e3c 100644
--- a/src/backend/InvenTree/part/test_bom_item.py
+++ b/src/backend/InvenTree/part/test_bom_item.py
@@ -8,6 +8,7 @@ from django.test import TestCase
import build.models
import stock.models
+from common.settings import set_global_setting
from .models import BomItem, BomItemSubstitute, Part
@@ -391,6 +392,44 @@ class BomItemTest(TestCase):
# Delete the new BOM item
bom_item.delete()
+ def test_locked_assembly_locking_disabled(self):
+ """Test that a locked assembly is not enforced when PART_ENABLE_LOCKING is disabled."""
+ assembly = Part.objects.create(
+ name='Assembly3', description='An assembly part', assembly=True
+ )
+ sub_part = Part.objects.create(
+ name='SubPart2', description='A sub-part', component=True
+ )
+
+ bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=1)
+
+ assembly.locked = True
+ assembly.save()
+
+ # With locking enabled (default), editing is blocked
+ with self.assertRaises(django_exceptions.ValidationError):
+ bom_item.quantity = 5
+ bom_item.save()
+
+ # Disable locking globally — all BOM operations should now be allowed
+ set_global_setting('PART_ENABLE_LOCKING', False)
+
+ bom_item.quantity = 5
+ bom_item.save()
+
+ BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=2)
+
+ bom_item.delete()
+
+ # Re-enable for other tests
+ set_global_setting('PART_ENABLE_LOCKING', True)
+
+ # Confirm locking is enforced again
+ bom_item2 = BomItem.objects.get(part=assembly, sub_part=sub_part, quantity=2)
+ with self.assertRaises(django_exceptions.ValidationError):
+ bom_item2.quantity = 99
+ bom_item2.save()
+
def test_bom_validated(self):
"""Test for caching of 'bom_validated' property."""
from part.tasks import validate_bom
@@ -438,7 +477,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/part/test_param.py b/src/backend/InvenTree/part/test_param.py
index 76b3fb241b..41e6c3c4b0 100644
--- a/src/backend/InvenTree/part/test_param.py
+++ b/src/backend/InvenTree/part/test_param.py
@@ -6,6 +6,7 @@ from django.test import TestCase, TransactionTestCase
from django.urls import reverse
from common.models import InvenTreeSetting, Parameter, ParameterTemplate
+from common.settings import set_global_setting
from InvenTree.unit_test import InvenTreeAPITestCase
from .models import Part, PartCategory, PartCategoryParameterTemplate
@@ -141,6 +142,43 @@ class TestParams(TestCase):
# And we can delete the parameter
parameter.delete()
+ def test_locked_part_locking_disabled(self):
+ """Test that parameter restrictions are lifted when PART_ENABLE_LOCKING is disabled."""
+ part = Part.objects.create(
+ name='Test Part Lock Override',
+ description='Part for testing global locking override',
+ category=PartCategory.objects.first(),
+ )
+
+ parameter = Parameter.objects.create(
+ content_object=part, template=ParameterTemplate.objects.first(), data='100'
+ )
+
+ part.locked = True
+ part.save()
+
+ # With locking enabled (default), editing and deletion are blocked
+ with self.assertRaises(django_exceptions.ValidationError):
+ parameter.data = '200'
+ parameter.save()
+
+ with self.assertRaises(django_exceptions.ValidationError):
+ parameter.delete()
+
+ # Disable locking globally — parameter operations should now succeed
+ set_global_setting('PART_ENABLE_LOCKING', False)
+
+ parameter.data = '200'
+ parameter.save()
+ self.assertEqual(parameter.data, '200')
+
+ # Re-enable locking — editing should be blocked again
+ set_global_setting('PART_ENABLE_LOCKING', True)
+
+ with self.assertRaises(django_exceptions.ValidationError):
+ parameter.data = '300'
+ parameter.save()
+
class TestCategoryTemplates(TransactionTestCase):
"""Test class for PartCategoryParameterTemplate model."""
diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py
index 81551bfabf..05e58d225e 100644
--- a/src/backend/InvenTree/part/test_part.py
+++ b/src/backend/InvenTree/part/test_part.py
@@ -353,6 +353,28 @@ class PartTest(TestCase):
part.delete()
+ def test_delete_locking_disabled(self):
+ """Test that a locked part can be deleted when PART_ENABLE_LOCKING is disabled."""
+ part = Part.objects.create(
+ name='Locked Part Test',
+ description='Part for testing locking override',
+ active=False,
+ )
+
+ part.locked = True
+ part.save()
+
+ # With locking enabled (default), deletion of a locked part raises an error
+ with self.assertRaises(ValidationError):
+ part.delete()
+
+ # Disable locking globally — locked part should now be deletable
+ set_global_setting('PART_ENABLE_LOCKING', False)
+ part.delete()
+
+ # Re-enable for other tests
+ set_global_setting('PART_ENABLE_LOCKING', True)
+
def test_revisions(self):
"""Test the 'revision' and 'revision_of' field."""
template = Part.objects.create(
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/plugin.py b/src/backend/InvenTree/plugin/plugin.py
index 9019951c11..1e9518cc99 100644
--- a/src/backend/InvenTree/plugin/plugin.py
+++ b/src/backend/InvenTree/plugin/plugin.py
@@ -5,7 +5,6 @@ import json
import re
import warnings
from datetime import datetime
-from distutils.sysconfig import get_python_lib
from importlib.metadata import PackageNotFoundError, metadata
from pathlib import Path
from typing import Optional
@@ -528,6 +527,8 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase):
@mark_final
def is_editable(cls):
"""Returns if the current part is editable."""
+ from distutils.sysconfig import get_python_lib
+
pkg_name = cls.__name__.split('.')[0]
dist_info = list(Path(get_python_lib()).glob(f'{pkg_name}-*.dist-info'))
return bool(len(dist_info) == 1)
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 %}
+
+
+
+{% endblock header_content %}
+
+{% block page_content %}
+
+{% trans "Line Items" %}
+
+
+
+
+ | {% trans "Part" %} |
+ {% trans "Reference" %} |
+ {% trans "Quantity" %} |
+ {% trans "Transferred" %} |
+ {% trans "Note" %} |
+
+
+
+ {% for line in lines.all %}
+
+
+
+ 
+
+
+ {{ line.part.full_name }}
+
+ |
+ {{ line.reference }} |
+ {% decimal line.quantity %} |
+ {% decimal line.transferred %} |
+ {{ line.notes }} |
+
+ {% endfor %}
+
+
+
+{% 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..d1eff6b112 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')
@@ -907,7 +916,14 @@ class StockFilter(FilterSet):
| Q(supplier_part__manufacturer_part__manufacturer=company)
).distinct()
- # Update date filters
+ created_before = InvenTreeDateFilter(
+ label=_('Created before'), field_name='creation_date', lookup_expr='lt'
+ )
+
+ created_after = InvenTreeDateFilter(
+ label=_('Created after'), field_name='creation_date', lookup_expr='gt'
+ )
+
updated_before = InvenTreeDateFilter(
label=_('Updated before'), field_name='updated', lookup_expr='lt'
)
@@ -924,6 +940,16 @@ class StockFilter(FilterSet):
label=_('Stocktake After'), field_name='stocktake_date', lookup_expr='gt'
)
+ has_stocktake = rest_filters.BooleanFilter(
+ label=_('Has Stocktake Date'), method='filter_has_stocktake'
+ )
+
+ def filter_has_stocktake(self, queryset, name, value):
+ """Filter by whether or not the StockItem has a stocktake date."""
+ if str2bool(value):
+ return queryset.exclude(stocktake_date=None)
+ return queryset.filter(stocktake_date=None)
+
# Stock "expiry" filters
expiry_before = InvenTreeDateFilter(
label=_('Expiry date before'), field_name='expiry_date', lookup_expr='lt'
@@ -1234,7 +1260,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)
@@ -1287,6 +1313,7 @@ class StockList(
'part__IPN',
'updated',
'purchase_price',
+ 'creation_date',
'stocktake_date',
'expiry_date',
'packaging',
@@ -1580,6 +1607,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/migrations/0120_stockitem_creation_date.py b/src/backend/InvenTree/stock/migrations/0120_stockitem_creation_date.py
new file mode 100644
index 0000000000..e4abb47560
--- /dev/null
+++ b/src/backend/InvenTree/stock/migrations/0120_stockitem_creation_date.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.2.14 on 2026-05-26 08:49
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("stock", "0119_alter_stockitemtestresult_date"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="stockitem",
+ name="creation_date",
+ field=models.DateTimeField(
+ blank=True,
+ help_text="Date that this stock item was created",
+ null=True,
+ verbose_name="Creation Date",
+ ),
+ ),
+ ]
diff --git a/src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py b/src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py
new file mode 100644
index 0000000000..d6e5087a8e
--- /dev/null
+++ b/src/backend/InvenTree/stock/migrations/0121_auto_20260526_0849.py
@@ -0,0 +1,102 @@
+# Generated by Django 5.2.14 on 2026-05-26 08:49
+
+import datetime
+from tqdm import tqdm
+
+from django.db import migrations
+
+
+def set_creation_date(apps, schema_editor):
+ """Set the creation_date field for existing StockItem entries."""
+
+ StockItem = apps.get_model('stock', 'StockItem')
+ StockItemTracking = apps.get_model('stock', 'StockItemTracking')
+
+ # First pass - find all StockHistoryCode.CREATED entries
+ # Note: As of 2026-05-26, the relevant status codes were:
+ # CREATED = 1
+
+ creation_entries = StockItemTracking.objects.filter(tracking_type=1)
+
+ items_to_update = []
+
+ def process_item(item):
+ """Process a StockItem entry for update.
+
+ As we are iterating over a potentially large number of StockItem entries,
+ we periodically write updates to the database in batches to avoid memory issues.
+ """
+ nonlocal items_to_update
+
+ items_to_update.append(item)
+
+ if len(items_to_update) >= 250:
+ StockItem.objects.bulk_update(items_to_update, ['creation_date'])
+ items_to_update = []
+
+ if creation_entries.count() > 0:
+ progress = tqdm(total=creation_entries.count(), desc='stock.0121: Setting creation_date for StockItem entries')
+
+
+ for entry in creation_entries:
+ item = StockItem.objects.filter(pk=entry.item_id).first()
+ if item and item.creation_date is None:
+ item.creation_date = entry.date
+ process_item(item)
+
+ progress.update(1)
+
+ progress.close()
+
+ # Next: Find any StockItem entries that have a null creation_date
+ items = StockItem.objects.filter(creation_date__isnull=True)
+
+ if items.count() > 0:
+
+ progress = tqdm(total=items.count(), desc='stock.0121: Setting creation_date for remaining StockItem entries')
+
+ for item in items:
+ # Source the creation_date from the stock item
+ earliest_entry = StockItemTracking.objects.filter(item_id=item.pk).order_by('date').first()
+
+ # Gather potential datetime sources for the creation_date field
+ utc = datetime.timezone.utc
+
+ def make_aware(dt):
+ """Ensure a datetime is UTC-aware for safe cross-type comparison."""
+ return dt.replace(tzinfo=utc) if dt.tzinfo is None else dt.astimezone(utc)
+
+ raw_options = [
+ item.updated,
+ datetime.datetime(item.stocktake_date.year, item.stocktake_date.month, item.stocktake_date.day, tzinfo=utc) if item.stocktake_date else None,
+ earliest_entry.date if earliest_entry else None,
+ ]
+ date_options = [make_aware(d) for d in raw_options if d is not None]
+
+ if date_options:
+ item.creation_date = min(date_options)
+ process_item(item)
+
+ progress.update(1)
+
+ # Update the remaining items
+ StockItem.objects.bulk_update(items_to_update, ['creation_date'], batch_size=250)
+
+
+class Migration(migrations.Migration):
+ """This migration extracts the 'creation_date' field for each StockItem entry.
+
+ - If a CREATED entry exists in the StockItemTracking table, this is used as the source for the creation_date field.
+ - If no CREATED entry exists, the creation_date is sourced from the earliest of the following
+ - The 'updated' field of the StockItem entry
+ - The 'stocktake_date' field of the StockItem entry (converted to a datetime)
+ - The earliest entry in the StockItemTracking table for that item
+ """
+
+ dependencies = [
+ ("stock", "0120_stockitem_creation_date"),
+ ]
+
+ operations = [
+ migrations.RunPython(set_creation_date, reverse_code=migrations.RunPython.noop),
+ ]
diff --git a/src/backend/InvenTree/stock/migrations/0122_alter_stockitem_creation_date.py b/src/backend/InvenTree/stock/migrations/0122_alter_stockitem_creation_date.py
new file mode 100644
index 0000000000..c26c17b8b1
--- /dev/null
+++ b/src/backend/InvenTree/stock/migrations/0122_alter_stockitem_creation_date.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.2.14 on 2026-05-26 09:32
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("stock", "0121_auto_20260526_0849"),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name="stockitem",
+ name="creation_date",
+ field=models.DateTimeField(
+ auto_now_add=True,
+ help_text="Date that this stock item was created",
+ null=True,
+ verbose_name="Creation Date",
+ ),
+ ),
+ ]
diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py
index d941919706..a89a94d26d 100644
--- a/src/backend/InvenTree/stock/models.py
+++ b/src/backend/InvenTree/stock/models.py
@@ -38,6 +38,7 @@ import stock.tasks
from common.icons import validate_icon
from common.settings import get_global_setting
from company import models as CompanyModels
+from generic.enums import StringEnum
from generic.states import StatusCodeMixin
from generic.states.fields import InvenTreeCustomStatusModelField
from InvenTree.fields import InvenTreeModelMoneyField, InvenTreeURLField
@@ -47,6 +48,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
@@ -398,6 +400,27 @@ class StockItemReportContext(report.mixins.BaseReportContext):
test_templates: dict[str, PartModels.PartTestTemplate]
+class StockSortOrder(StringEnum):
+ """Enum of ORM sort fields available for stock auto-allocation."""
+
+ DATE_OLDEST = 'updated'
+ DATE_NEWEST = '-updated'
+ QUANTITY_ASC = 'quantity'
+ QUANTITY_DESC = '-quantity'
+ EXPIRY_SOONEST = 'expiry_date'
+
+
+STOCK_SORT_CHOICES = [
+ (StockSortOrder.DATE_OLDEST, _('Oldest stock first (FIFO)')),
+ (StockSortOrder.DATE_NEWEST, _('Newest stock first (LIFO)')),
+ (StockSortOrder.QUANTITY_ASC, _('Smallest quantity first')),
+ (StockSortOrder.QUANTITY_DESC, _('Largest quantity first')),
+ (StockSortOrder.EXPIRY_SOONEST, _('Soonest expiry date first')),
+]
+
+STOCK_SORT_DEFAULT = StockSortOrder.DATE_OLDEST
+
+
class StockItem(
InvenTree.models.PluginValidationMixin,
InvenTree.models.InvenTreeAttachmentMixin,
@@ -420,7 +443,8 @@ class StockItem(
batch: Batch number for this StockItem
serial: Unique serial number for this StockItem
link: Optional URL to link to external resource
- updated: Date that this stock item was last updated (auto)
+ creation_date: Date that this stock item was created (auto)
+ updated: Date that the quantity of this stock item was last updated (auto)
expiry_date: Expiry date of the StockItem (optional)
stocktake_date: Date of last stocktake for this item
stocktake_user: User that performed the most recent stocktake
@@ -449,6 +473,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 +747,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 +883,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 +959,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()
@@ -1180,6 +1228,15 @@ class StockItem(
related_name='stocktake_stock',
)
+ creation_date = models.DateTimeField(
+ null=True,
+ blank=True,
+ auto_now_add=True,
+ editable=False,
+ verbose_name=_('Creation Date'),
+ help_text=_('Date that this stock item was created'),
+ )
+
review_needed = models.BooleanField(default=False)
delete_on_deplete = models.BooleanField(
@@ -1511,7 +1568,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 +1628,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 +2066,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 +2101,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 +2399,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 +2551,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 +2794,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..0bb12450a8 100644
--- a/src/backend/InvenTree/stock/serializers.py
+++ b/src/backend/InvenTree/stock/serializers.py
@@ -371,8 +371,9 @@ class StockItemSerializer(
'SKU',
'MPN',
'barcode_hash',
- 'updated',
+ 'creation_date',
'stocktake_date',
+ 'updated',
'purchase_price',
'purchase_price_currency',
'use_pack_size',
@@ -395,6 +396,7 @@ class StockItemSerializer(
read_only_fields = [
'allocated',
'barcode_hash',
+ 'creation_date',
'stocktake_date',
'stocktake_user',
'updated',
@@ -520,6 +522,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 +1132,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 +1171,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 +1394,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..27de523ec8 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."""
@@ -575,6 +545,62 @@ class StockItemListTest(StockAPITestCase):
for ordering in ['part', 'location', 'stock', 'status', 'IPN', 'MPN', 'SKU']:
self.run_ordering_test(self.list_url, ordering)
+ def test_creation_date_filter_and_ordering(self):
+ """Test created_before / created_after filters and ordering by creation_date."""
+ import datetime
+
+ part = Part.objects.first()
+ location = StockLocation.objects.first()
+
+ # Create items with known, spread-out creation_dates via UPDATE after insert
+ dates = [
+ datetime.date(2020, 1, 1),
+ datetime.date(2021, 6, 15),
+ datetime.date(2023, 3, 30),
+ ]
+ pks = []
+ for d in dates:
+ item = StockItem.objects.create(part=part, location=location, quantity=1)
+ StockItem.objects.filter(pk=item.pk).update(creation_date=d)
+ pks.append(item.pk)
+
+ # created_after=2020-12-31 should exclude the 2020 item
+ result_pks = [r['pk'] for r in self.get_stock(created_after='2020-12-31')]
+ self.assertNotIn(pks[0], result_pks)
+ self.assertIn(pks[1], result_pks)
+ self.assertIn(pks[2], result_pks)
+
+ # created_before=2022-01-01 should exclude the 2023 item
+ result_pks = [r['pk'] for r in self.get_stock(created_before='2022-01-01')]
+ self.assertIn(pks[0], result_pks)
+ self.assertIn(pks[1], result_pks)
+ self.assertNotIn(pks[2], result_pks)
+
+ # combined: only the 2021 item falls in the window
+ result_pks = [
+ r['pk']
+ for r in self.get_stock(
+ created_after='2020-12-31', created_before='2022-01-01'
+ )
+ ]
+ self.assertNotIn(pks[0], result_pks)
+ self.assertIn(pks[1], result_pks)
+ self.assertNotIn(pks[2], result_pks)
+
+ # ordering=creation_date: our three items must appear in ascending date order
+ results = self.get(
+ self.list_url, {'ordering': 'creation_date'}, expected_code=200
+ ).data
+ ordered_pks = [r['pk'] for r in results if r['pk'] in pks]
+ self.assertEqual(ordered_pks, pks)
+
+ # ordering=-creation_date: descending
+ results = self.get(
+ self.list_url, {'ordering': '-creation_date'}, expected_code=200
+ ).data
+ ordered_pks = [r['pk'] for r in results if r['pk'] in pks]
+ self.assertEqual(ordered_pks, list(reversed(pks)))
+
def test_pagination(self):
"""Test that pagination boundaries are observed correctly.
@@ -602,9 +628,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)
@@ -1486,6 +1510,49 @@ class StockItemTest(StockAPITestCase):
data={'part': 1, 'location': 1, 'quantity': 10},
expected_code=201,
)
+ # creation_date must be populated on the newly created item
+ item = StockItem.objects.get(pk=response.data[0]['pk'])
+ self.assertIsNotNone(item.creation_date)
+
+ def test_creation_date_is_readonly(self):
+ """creation_date must not be modifiable via the API."""
+ item = StockItem.objects.create(
+ part=Part.objects.get(pk=1),
+ location=StockLocation.objects.get(pk=1),
+ quantity=1,
+ )
+ original_date = item.creation_date
+ self.assertIsNotNone(original_date)
+
+ url = reverse('api-stock-detail', kwargs={'pk': item.pk})
+ self.patch(
+ url, data={'creation_date': '2000-01-01T00:00:00Z'}, expected_code=200
+ )
+ # Field is read-only; the DB value must be unchanged
+ item.refresh_from_db()
+ self.assertEqual(item.creation_date, original_date)
+
+ def test_creation_date_set_on_serialize(self):
+ """creation_date must be set on items produced by the serialize endpoint."""
+ # Stock item 100: part 25 (trackable), quantity 10, location 7
+ item = StockItem.objects.get(pk=100)
+ url = reverse('api-stock-item-serialize', kwargs={'pk': item.pk})
+
+ self.post(
+ url,
+ data={
+ 'quantity': 3,
+ 'serial_numbers': '901,902,903',
+ 'destination': item.location.pk,
+ },
+ expected_code=201,
+ )
+ new_items = StockItem.objects.filter(
+ part=item.part, serial__in=['901', '902', '903']
+ )
+ self.assertEqual(new_items.count(), 3)
+ for new_item in new_items:
+ self.assertIsNotNone(new_item.creation_date)
def test_stock_item_create_with_supplier_part(self):
"""Test creation of a StockItem via the API, including SupplierPart data."""
@@ -1629,6 +1696,7 @@ class StockItemTest(StockAPITestCase):
# Item location should have been set automatically
self.assertIsNotNone(item.location)
self.assertIn(item.serial, serials)
+ self.assertIsNotNone(item.creation_date)
# There now should be 10 unique stock entries for this part
self.assertEqual(trackable_part.stock_entries().count(), 10)
@@ -1646,6 +1714,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 +2281,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/stock/test_migrations.py b/src/backend/InvenTree/stock/test_migrations.py
index 7901239951..c26b881f42 100644
--- a/src/backend/InvenTree/stock/test_migrations.py
+++ b/src/backend/InvenTree/stock/test_migrations.py
@@ -415,3 +415,172 @@ class TestStockItemTrackingMigration(MigratorTestCase):
)
self.assertIn('salesorder', item.deltas)
self.assertEqual(item.deltas['salesorder'], 1)
+
+
+class TestCreationDateMigration(MigratorTestCase):
+ """Test the backfill data migration for StockItem.creation_date (stock.0121).
+
+ The migration has two passes:
+ - Pass 1: items with a CREATED (tracking_type=1) entry get creation_date from that entry.
+ - Pass 2: remaining nulls get min(updated, stocktake_date, earliest_tracking_entry).
+
+ Six scenarios are exercised to cover every meaningful code path.
+ """
+
+ migrate_from = ('stock', '0119_alter_stockitemtestresult_date')
+ migrate_to = ('stock', '0122_alter_stockitem_creation_date')
+
+ def prepare(self):
+ """Create StockItem entries with varied data to exercise all backfill paths."""
+ import datetime
+
+ from django.db import connection
+
+ Part = self.old_state.apps.get_model('part', 'part')
+ StockItemTracking = self.old_state.apps.get_model('stock', 'stockitemtracking')
+
+ utc = datetime.timezone.utc
+
+ part = Part.objects.create(
+ name='Migration Test Part', level=0, tree_id=1, lft=0, rght=0
+ )
+
+ def make_item(stocktake_date=None):
+ """Insert a StockItem row via raw SQL, bypassing the duplicate-column ORM bug.
+
+ The historical model at migration 0119 has status_custom_key enumerated twice
+ (once from contribute_to_class on the status field, once from migration 0113's
+ explicit AddField), so ORM-generated INSERTs fail with
+ 'column specified more than once'. Raw SQL avoids the ORM field list entirely.
+ Raw SQL also leaves updated=NULL (no DB-level default for auto_now), which
+ makes Scenario 6 a clean "no date sources available" case.
+ """
+ with connection.cursor() as cursor:
+ cursor.execute(
+ """
+ INSERT INTO stock_stockitem
+ (part_id, quantity, level, tree_id, lft, rght,
+ status, delete_on_deplete, review_needed, is_building,
+ link, serial_int, barcode_data, barcode_hash)
+ VALUES (%s, 1, 0, 0, 0, 0, 10, false, false, false, '', 0, '', '')
+ RETURNING id
+ """,
+ [part.pk],
+ )
+ pk = cursor.fetchone()[0]
+ if stocktake_date is not None:
+ cursor.execute(
+ 'UPDATE stock_stockitem SET stocktake_date = %s WHERE id = %s',
+ [stocktake_date, pk],
+ )
+ return pk
+
+ def add_tracking(pk, tracking_type, date):
+ """Create a tracking entry, then override its auto_now_add date."""
+ entry = StockItemTracking.objects.create(
+ item_id=pk, tracking_type=tracking_type
+ )
+ # auto_now_add prevents setting date on INSERT; use UPDATE to set a historical value
+ StockItemTracking.objects.filter(pk=entry.pk).update(date=date)
+
+ # --- Scenario 1 ---
+ # Item with a single CREATED (type=1) tracking entry.
+ # Pass 1 should set creation_date = that entry's date.
+ pk = make_item()
+ add_tracking(pk, 1, datetime.datetime(2022, 1, 15, 10, 0, 0, tzinfo=utc))
+ self.pk_s1 = pk
+ self.expected_s1 = datetime.datetime(2022, 1, 15, 10, 0, 0, tzinfo=utc)
+
+ # --- Scenario 2 ---
+ # Item with a CREATED entry (newer date) AND an older non-CREATED entry.
+ # Pass 1 sets creation_date = CREATED entry date; older entry is ignored.
+ # This verifies pass 1 wins over pass 2's min() logic.
+ pk = make_item()
+ add_tracking(
+ pk, 1, datetime.datetime(2023, 6, 1, 0, 0, 0, tzinfo=utc)
+ ) # CREATED, newer
+ add_tracking(
+ pk, 2, datetime.datetime(2018, 3, 10, 0, 0, 0, tzinfo=utc)
+ ) # non-CREATED, older
+ self.pk_s2 = pk
+ self.expected_s2 = datetime.datetime(2023, 6, 1, 0, 0, 0, tzinfo=utc)
+ self.rejected_s2 = datetime.date(2018, 3, 10)
+
+ # --- Scenario 3 ---
+ # Item with only non-CREATED tracking entries.
+ # Pass 2 uses min(earliest_entry_date), so earliest entry wins.
+ pk = make_item()
+ add_tracking(
+ pk, 2, datetime.datetime(2021, 7, 20, 0, 0, 0, tzinfo=utc)
+ ) # later
+ add_tracking(
+ pk, 3, datetime.datetime(2020, 2, 14, 0, 0, 0, tzinfo=utc)
+ ) # earliest
+ self.pk_s3 = pk
+ self.expected_s3 = datetime.datetime(2020, 2, 14, 0, 0, 0, tzinfo=utc)
+
+ # --- Scenario 4 ---
+ # Item with only stocktake_date set; no tracking entries.
+ # Pass 2 uses stocktake_as_datetime (in the past) as the date.
+ pk = make_item(stocktake_date=datetime.date(2019, 11, 5))
+ self.pk_s4 = pk
+ self.expected_s4_date = datetime.date(2019, 11, 5)
+
+ # --- Scenario 5 ---
+ # Item with stocktake_date AND a non-CREATED tracking entry where the tracking
+ # entry is older than stocktake_date.
+ # Pass 2 uses min(stocktake, tracking); tracking wins.
+ pk = make_item(stocktake_date=datetime.date(2021, 4, 1))
+ add_tracking(pk, 2, datetime.datetime(2017, 8, 22, 0, 0, 0, tzinfo=utc))
+ self.pk_s5 = pk
+ self.expected_s5 = datetime.datetime(2017, 8, 22, 0, 0, 0, tzinfo=utc)
+
+ # --- Scenario 6 ---
+ # Item inserted via raw SQL with no stocktake_date and no tracking entries,
+ # so updated=NULL. No date sources exist → creation_date stays NULL after migration.
+ pk = make_item()
+ self.pk_s6 = pk
+
+ def test_migration(self):
+ """Verify creation_date is correctly backfilled for each scenario."""
+ import datetime
+
+ StockItem = self.new_state.apps.get_model('stock', 'stockitem')
+ utc = datetime.timezone.utc
+
+ def at_utc(dt):
+ """Normalise to UTC and strip sub-second precision for comparison."""
+ return dt.astimezone(utc).replace(microsecond=0)
+
+ # Scenario 1: CREATED tracking entry → creation_date = entry date
+ item = StockItem.objects.get(pk=self.pk_s1)
+ self.assertIsNotNone(item.creation_date)
+ self.assertEqual(at_utc(item.creation_date), self.expected_s1)
+
+ # Scenario 2: CREATED entry (newer) wins over older non-CREATED entry
+ item = StockItem.objects.get(pk=self.pk_s2)
+ self.assertIsNotNone(item.creation_date)
+ self.assertEqual(at_utc(item.creation_date), self.expected_s2)
+ # Explicitly confirm the older non-CREATED date was NOT chosen
+ self.assertNotEqual(item.creation_date.astimezone(utc).date(), self.rejected_s2)
+
+ # Scenario 3: Earliest non-CREATED tracking entry wins (pass 2 min())
+ item = StockItem.objects.get(pk=self.pk_s3)
+ self.assertIsNotNone(item.creation_date)
+ self.assertEqual(at_utc(item.creation_date), self.expected_s3)
+
+ # Scenario 4: stocktake_date (past) wins over auto_now 'updated' (now)
+ item = StockItem.objects.get(pk=self.pk_s4)
+ self.assertIsNotNone(item.creation_date)
+ self.assertEqual(
+ item.creation_date.astimezone(utc).date(), self.expected_s4_date
+ )
+
+ # Scenario 5: Oldest tracking entry wins over stocktake_date (pass 2 min())
+ item = StockItem.objects.get(pk=self.pk_s5)
+ self.assertIsNotNone(item.creation_date)
+ self.assertEqual(at_utc(item.creation_date), self.expected_s5)
+
+ # Scenario 6: updated=NULL, no stocktake, no tracking → creation_date stays NULL
+ item = StockItem.objects.get(pk=self.pk_s6)
+ self.assertIsNone(item.creation_date)
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/migrations/0011_auto_20240523_1640.py b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py
index 6dd75904a9..428edaecfd 100644
--- a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py
+++ b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py
@@ -1,11 +1,16 @@
# Generated by Django 4.2.12 on 2024-05-23 16:40
+import structlog
+
from importlib import import_module
from django.conf import settings
from django.db import migrations
+logger = structlog.getLogger('inventree')
+
+
def clear_sessions(apps, schema_editor): # pragma: no cover
"""Clear all user sessions."""
@@ -16,7 +21,7 @@ def clear_sessions(apps, schema_editor): # pragma: no cover
try:
engine = import_module(settings.SESSION_ENGINE)
engine.SessionStore.clear_expired()
- print('\nCleared all user sessions to deal with GHSA-2crp-q9pc-457j')
+ logger.info('Cleared all user sessions to deal with GHSA-2crp-q9pc-457j')
except Exception:
# Database may not be ready yet, so this does not matter anyhow
pass
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 b5e687ce1f..52656a33fa 100644
--- a/src/backend/InvenTree/users/oauth2_scopes.py
+++ b/src/backend/InvenTree/users/oauth2_scopes.py
@@ -15,10 +15,12 @@ _roles = {
'part': 'Role Parts',
'stock_location': 'Role Stock Locations',
'stock': 'Role Stock Items',
+ 'bom': 'Role Bills of Material',
'build': 'Role Build Orders',
'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/permissions.py b/src/backend/InvenTree/users/permissions.py
index 7c93f5ec97..c3d7c964b1 100644
--- a/src/backend/InvenTree/users/permissions.py
+++ b/src/backend/InvenTree/users/permissions.py
@@ -195,6 +195,11 @@ def check_user_permission(
result = user.has_perm(permission_name)
+ # If the user does not have permissions (as determined above), check if the model class provides a custom permission check method
+ # This is required for non-standard models (i.e. defined via plugins), which do not have the required ruleset definitions
+ if not result and hasattr(model, 'check_user_permission'): # pragma: no cover
+ result = model.check_user_permission(user, permission)
+
# Save result to session-cache
InvenTree.cache.set_session_cache(cache_key, result)
diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py
index ed70b79b4d..3787eb89b9 100644
--- a/src/backend/InvenTree/users/ruleset.py
+++ b/src/backend/InvenTree/users/ruleset.py
@@ -12,12 +12,14 @@ class RuleSetEnum(StringEnum):
ADMIN = 'admin'
PART_CATEGORY = 'part_category'
PART = 'part'
+ BOM = 'bom'
STOCK_LOCATION = 'stock_location'
STOCK = 'stock'
BUILD = 'build'
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.
@@ -26,12 +28,14 @@ RULESET_CHOICES = [
(RuleSetEnum.ADMIN, _('Admin')),
(RuleSetEnum.PART_CATEGORY, _('Part Categories')),
(RuleSetEnum.PART, _('Parts')),
+ (RuleSetEnum.BOM, _('Bills of Material')),
(RuleSetEnum.STOCK_LOCATION, _('Stock Locations')),
(RuleSetEnum.STOCK, _('Stock Items')),
(RuleSetEnum.BUILD, _('Build Orders')),
(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.
@@ -94,6 +98,18 @@ def get_ruleset_models() -> dict:
'django_mailbox_messageattachment',
'django_mailbox_message',
],
+ RuleSetEnum.BOM: ['part_bomitem', 'part_bomitemsubstitute'],
+ RuleSetEnum.BUILD: [
+ 'part_part',
+ 'part_partcategory',
+ 'part_bomitem',
+ 'part_bomitemsubstitute',
+ 'build_build',
+ 'build_builditem',
+ 'build_buildline',
+ 'stock_stockitem',
+ 'stock_stocklocation',
+ ],
RuleSetEnum.PART_CATEGORY: [
'part_partcategory',
'part_partcategoryparametertemplate',
@@ -102,8 +118,6 @@ def get_ruleset_models() -> dict:
RuleSetEnum.PART: [
'part_part',
'part_partpricing',
- 'part_bomitem',
- 'part_bomitemsubstitute',
'part_partsellpricebreak',
'part_partinternalpricebreak',
'part_parttesttemplate',
@@ -120,17 +134,6 @@ def get_ruleset_models() -> dict:
'stock_stockitemtracking',
'stock_stockitemtestresult',
],
- RuleSetEnum.BUILD: [
- 'part_part',
- 'part_partcategory',
- 'part_bomitem',
- 'part_bomitemsubstitute',
- 'build_build',
- 'build_builditem',
- 'build_buildline',
- 'stock_stockitem',
- 'stock_stocklocation',
- ],
RuleSetEnum.PURCHASE_ORDER: [
'company_company',
'company_contact',
@@ -160,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/users/test_api.py b/src/backend/InvenTree/users/test_api.py
index c3acd2de0b..20cd9488d8 100644
--- a/src/backend/InvenTree/users/test_api.py
+++ b/src/backend/InvenTree/users/test_api.py
@@ -54,12 +54,16 @@ class UserAPITests(InvenTreeAPITestCase):
url = reverse('api-build-list')
response = self.options(url)
actions = response.data['actions']['POST']
- issued_by = actions['issued_by']
- self.assertEqual(issued_by['pk_field'], 'pk')
- self.assertEqual(issued_by['model'], 'user')
- self.assertEqual(issued_by['api_url'], reverse('api-user-list'))
- self.assertEqual(issued_by['default'], self.user.pk)
+ issued_by = actions['issued_by']
+ self.assertTrue(issued_by['read_only'])
+
+ project_code = actions['project_code']
+ self.assertFalse(project_code['read_only'])
+ self.assertEqual(project_code['type'], 'related field')
+ self.assertEqual(project_code['model'], 'projectcode')
+ self.assertEqual(project_code['api_url'], reverse('api-project-code-list'))
+ self.assertEqual(project_code['pk_field'], 'pk')
def test_user_api(self):
"""Tests for User API endpoints."""
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('